2014-01-15 3436 views
1

我正在枚舉我的EntityFramework容器屬性。通過反思,我只獲得DbSet屬性。現在我需要訪問屬性值,我想這樣說:C#強制類型轉換爲泛型強類型

object obj = PropertyInfo.GetValue(myobject) 

所有在這裏,但我需要轉換爲它的實際類型(我非常需要這個):

DbSet<MyRealType> obj = (DbSet<MyRealType>)PropertyInfo.GetValue(myobject); 

MyRealType在編譯時是未知的。我只得到Type,但我可以將它投射到 DbSet<MyrealType>。這有可能實現嗎?

+2

請加上語言標記。 –

回答

1

不,這將是不可能的。你試圖做的是將運行時類型轉換爲編譯時類型,許多程序員嘗試並且未能這樣做。此時你的選擇主要涉及用反射來檢查類型,並試圖通過反射來調用那個人的方法和屬性。

您的其他選項是將值轉換爲dynamic,然後嘗試(並希望)您的調用按預期工作。在您的情況

所以,你最好的選擇將是可能使用動態類型:

dynamic obj = Propertyinfo.GetValue(myobject); 
obj.SomeMethodYouWantToCall(); // and catch DLR errors 
+0

我嘗試了動態的方式,但它看起來像擴展方法不會被調用(實際上它似乎很明顯)。不管怎樣,謝謝你。 – sam

+1

您仍然可以從動態對象中調用擴展方法,這只是更多的工作。 IE:'EnumerableExtensions.Select(obj,x => x.SomeProperty)'通常爲'obj.Select(x => x.SomeProperty)''。擴展方法只是語法糖= D – Tejs