Reflekcja GetMember GetValue - jak pobrać wartość?

0

Chcę stworzyć kontrolkę (akurat GridView), której właściwościami będzie kilka pól typu IList, które, po odpowiedniej obróbce, będą wyświetlane tak jak sobie chce
(np jako wlasciwości mają być TYPY, OPISY, WARTOŚCI, wszystkie te 3 rzeczy mają wzajemne zależności i ja chce na tej kontrolce zaprezentować w odpowiedni sposób)

mam w kontrolce wlasciwość

 
public IList Opisy
{
get{return dsc};
set{dsc = value};
}
private IList dsc;

mam tez wlasciwości czego szukać - jakiego pola, czyli jakie pole reprezentuje Opis (Caption), a jakie Wartość

public string OpicCaption
{
get{return dscCaption};
set{dscCaption= value};
}
private string dscCaption;

w Formie, na której jest kontrolka, mam też jakąś listę obiektów
pzypisuję jedno do drugiego;

 
gridViev.Opisy = listaOpisow;

mówię, że to co ma być wyswietlone ma się nazywać odpowiednio, czyli żeby wyciągnąć wartość trzeba odwołac się do pola czy wlasciwości o podanej nazwie

 
gridView.OpicCaption = "Nazwa"

teraz przygotowuję sobie dane w kontrolce

 
if (Opisy== null)
{
	throw new Exception("bład Opisy Null");
}
else
{
	foreach (var item in Opisy)
	{
		System.Type tp = item.GetType();
		//na razie założyłem, że jest - nie ma sprawdzania czy jest czy go nie ma 
		tp.GetMember(dscCaption);
		String string1 =String.Empty; 
       //nie wiem co, jaki typ tutaj dać aby byłó dobrze, próbwałem z różnymi i nie działało
		object obj = tp.GetMember(dscCaption)[0].ReflectedType;
		switch (tp.GetMember(dscCaption)[0].MemberType)
		{
			case System.Reflection.MemberTypes.Field:
				obj = ((System.Reflection.FieldInfo)tp.GetMember(dscCaption)[0]).GetValue(obj);
				break;
			case System.Reflection.MemberTypes.Property:
				obj = ((System.Reflection.PropertyInfo)tp.GetMember(dscCaption)[0]).GetValue(obj,null);
				break;
		}
	}
}

i tu jest problem - jak dobrać się do wartości, właściwości o danej Nazwie

chcę pobrac wartość za pomocą poniższego fragmętu

 
switch (tp.GetMember(dscCaption)[0].MemberType)
{
     case System.Reflection.MemberTypes.Field:
		obj = ((System.Reflection.FieldInfo)tp.GetMember(dscCaption)[0]).GetValue(obj);
	break;
    case System.Reflection.MemberTypes.Property:
		obj = ((System.Reflection.PropertyInfo)tp.GetMember(dscCaption)[0]).GetValue(obj/*tu jest bład*/,null);
       break;
}

ale mam bład
Object does not match target type.

stąd moje pytanie i prośba - jak pobrać wartość danego obiektu o danej nazwie

z góry dziękuję za pomoc

ps - ja tam biegły w C# nie jestem, coś tam próbuję robic, więc może i głupoty bedą w tym co napisałem powyżej

0

a przeczytales jakie parametry przyjmuje GetValue? widze ze nie!
pierwszy parametr - obiekt ktorego wartosc wlasciwosci bedzie zwrocona
powinno byc ...GetValue(item, null)

1 użytkowników online, w tym zalogowanych: 0, gości: 1