我有一個方法,應該返回列表中的ID。 通常我會爲這個任務使用反射(我不能使用泛型方法,因爲類通常是POCOS,不共享接口或基類,我不能修改它們)。不過,我想到了關於新的dynamic
關鍵字,並想嘗試這一點。使用C#動態方法的對象
但是我的問題是dataSource [index]返回一個對象。那麼在運行時確保對象本身就是我自己的類,並有一個id屬性。 但我想,因爲該方法返回一個對象,我在運行時得到一個RumtineBinderException在訪問current.id
public List<int> GetItemIds()
{
var result = new List<int>();
var dataSource = GetDataSource(); // returns an List<Object>
for (int i = 0; i <= dataSource.Count - 1; i++)
{
dynamic current = dataSource[i];
int id = current.Id; // throws RuntimeBinderException: Object has no definition for id
}
return result;
}
有沒有辦法才達到我想要什麼或做我必須回去反射來獲取id屬性?
更新:
current.GetType() returns object
current.GetType().GetProperties() returns a TargetInvocationException
我波蘇斯住在我的主要項目(VB.net),但這種方法是在類libary,或許這就是原因。但是:
object current = dataSource[i];
PropertyInfo prop = current.GetType().GetProperty("id", BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (prop != null)
{
int id = (int)prop.GetValue(current, null);
}
的作品。
什麼是current.GetType()?這是你期望的類型嗎? –
這裏有一些錯誤....在上面的例子中使用動態應該使它工作,如果運行時類型有一個Id屬性... – Jeff
它應該工作 - 你可以更新與current.GetType() ,和current.GetType()。GetProperties()? – carlosfigueira