Получить конкретный тип из Object DataSource и использовать эту переменную типа в операции приведения - PullRequest
0 голосов
/ 11 января 2011

У меня есть

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 ]

0 голосов
/ 11 января 2011

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

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

и т.д.

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

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

PropertyInfo pi = DataSource.GetType().GetProperty(DisplayMember);
pi.SetValue(DataSource, "Peter");
0 голосов
/ 11 января 2011

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

0 голосов
/ 11 января 2011

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

...