Получить конкретный тип из Object DataSource и использовать эту переменную типа в операции приведения

У меня есть

public object DataSource {get;set} and a public string DisplayMember {get;set}

Объект может принимать все как IList или CustomerListDataSet.

Я не знаю, что пользователь будет устанавливать в DataSource.

Я пробовал это

Type myType = DataSource.GetType().UnderlyingSystemType;

??? myUnknownObjectInstance = (mytype)DataSource;

Я предполагаю, что это невозможно, даже если Reflection имеет доступ к myUnknownObjectInstance.PropertyNameFromDisplayMember и присваивает ему значение типа "Питер"?

3 ответа

Не могли бы вы реорганизовать класс для использования обобщений? так что у вас есть источник данных общего типа?

Я думаю тебе просто нужно DataSource.GetType()

Вы можете точно определить свой тип по

if (DataSource is IList)
{
 ...
}
else if (DataSource is DataTable)
{
...
}

так далее

Но если DataSource не является универсальным, вы не сможете выполнить такое приведение, как вы указали. Вы можете привести его, когда его тип указан в качестве параметра.

Вы можете получить доступ к собственности, написав

PropertyInfo pi = DataSource.GetType().GetProperty(DisplayMember);
pi.SetValue(DataSource, "Peter");
Другие вопросы по тегам