이전 스레드와의 연속 사용 Using reflection read properties of an object containing array of another object. EvgK에서이 훌륭한 방법을 제 코드 기반의 여러 위치에서 사용할 수있는 제네릭 방식으로 만들고 싶습니다.C#을 사용하여 런타임에 매개 변수, 속성 및 반환 형식을 읽는 한 가지 방법
public static void GetMyProperties(object obj)
{
List<MyPropertyInfo> oMyProp = new List<MyPropertyInfo>();
foreach (PropertyInfo pinfo in obj.GetType().GetProperties())
{
if (!Helper.IsCustomType(pinfo.PropertyType))
{
//add properties - name, value, type to the list
}
else
{
var getMethod = pinfo.GetGetMethod();
if (getMethod.ReturnType.IsArray)
{
var arrayObject = getMethod.Invoke(obj, null);
foreach (object element in (Array)arrayObject)
{
foreach (PropertyInfo arrayObjPinfo in element.GetType().GetProperties())
{
//add properties - name, value, type to the list
}
}
}
else
{
List<MyPropertyInfo> oTempMyProp = GetMyProperties(prop.GetValue(obj, null));
oMyProp.AddRange(oTempMyProp);
}
}
}
}
다시 말해서 사용자가 전달한 메서드를 읽으려고합니다. 매개 변수, 속성 및 값을 나열합니다. 사용자가 입력 값을 제공하면 메서드를 동적으로 호출하여 결과 개체를 가져옵니다. 결과는 GetMyProperties() 메서드에 전달되고 메서드는 이름, 값 및 형식의 모든 속성 (n 수준)을 나열합니다. - 이름, 값 및 유형
public List<MyPropertyInfo> GetMyProperties(Type type);
public List<MyPropertyInfo> GetMyProperties(object obj);
내가 그 속성의와 함께 선택한 방법의 모든 매개 변수의 목록을 표시하는 최초의 하나를 사용
현재, 나는 두 가지 방법 (아래 definations)가 있습니다.
MethodInfo members = type.GetMethod(this.MethodName);
ParameterInfo[] parameters = members.GetParameters();
List<MyPropertyInfo> oMyProp = new List<MyPropertyInfo>();
foreach (var parameter in parameters)
{
oMyProp = GetMyProperties(parameter.ParameterType);
}
. 사용자가 매개 변수를 입력 할 수 있도록 내 속성 목록을 만듭니다. ParameterType과 GetProperties 메서드가 사용자 지정 형식인지 확인합니다. 사용자 정의 유형의 경우 입력을 위해 표에 바인딩하는 목록을 작성하기 위해 재귀 적으로 유형을 호출합니다.
두 번째 방법 인 GetMyProperties (개체 obj)는 반환 개체를 나열하는 데 사용됩니다. 컴파일 시간에 선택한 메서드의 반환 형식을 알 수 없으므로 개체 형식을 사용합니다. 두 번째 메서드를 어떻게 든 매개 변수, 속성 및 반환 형식을 읽는 데 사용하도록 수정할 수 있는지 알고 싶습니다. 별도의 방법을 사용하는 대신? 코드를 재사용하려고합니다.
두 시나리오 모두에서 동일한 코드를 작성해야합니까? 논리 - 주어진 유형/객체에 대한 속성 - 이름/값/유형을 검사하기 때문에 동일합니다. 나는 두 가지 방법을 결합하여 하나의 공통 논리를 가질 것을 생각했다. 개체가 주어지면 모든 속성을 반복하고 필요한 특성을 반환합니다. 여기에 뭔가 빠져있을 수 있습니까? –