내 클래스의 필드를 순환 시키려고 시도하고 특정 유형의 필드를 목록에 배치 한 다음 해당 목록을 반환합니다. 나는 핵심 구성 요소가 빠져 있음을 알고 있지만, 내가 뭘 잘못하고 있는지 알 수 없다.클래스의 모든 필드를 반환
...
내가 포인터로 실제 필드의 목록을 반환 데이터의 복사본이 아닌 필요 : 이것은 내가 지금까지있는 것입니다. 이 일을하기위한 도움을 주시면 감사하겠습니다.
혼란을 겪었으므로 위 코드를 삭제했습니다 (기록에서 볼 수 있어야합니다).
string prop1;
BaseClass prop2;
SubClass prop3;
SubClass prop4;
public List<BaseClass> GetData()
{
List<BaseClass> DataList = new List<BaseClass>();
foreach (System.Reflection.PropertyInfo thisInfo in this.GetType().GetProperties())
{
var tempPropery = thisInfo.GetValue(this, null);
if (tempPropery.GetType().IsSubclassOf(typeof(BaseClass)) || tempPropery.GetType().Equals(typeof(BaseClass)))
{
DataList.Add((BaseClass)tempPropery);
};
}
return DataList;
}
은 위의 코드는 당신이 당신의 클래스에서 특정 기본 형식의 모든 속성을 얻고 그들을 반환 할 수 있습니다 :이 competent_tech에서 답 덕분에 작동 (제거 몇 가지 여분의 물건) 업데이트 된 코드입니다 목록에. 따라서 위의 코드는 prop2 - prop4를 반환합니다.
나는'사전 <문자열을 사용합니다 : 당신은 필드와 속성을 모두보고있는 경우, 또는
:
당신이 PropertyInfo이 있으면, 당신은을 getValue 메소드를 호출 할 수 , PrimaryAbility> 대신에. 그러면'STR '을 다음과 같이 얻을 수 있습니다 :'var str = AllAbilities [ "STR"];'. 리플렉션이 필요한 경우는 종종 코드를 리팩터링해야 함을 나타냅니다. –
나는 뭔가 새로운 것을 추가 할 때마다 여분의 코드 줄을 추가하는 것보다 모든 능력을 돌려주는 (그리고 다른 클래스들은 같은 구조를 사용하는) 쉬운 (그러나 처음에는 복잡한) 방법을 찾고있다. –