有沒有辦法在C#中取得類名並將其轉換爲字符串?以C#中字符串的形式獲取類的名稱
作爲實體框架的一部分,.Include方法需要在執行查詢時加入點分隔的字符串列表。我有我想要加入的類模型,由於重構和未來代碼維護的原因,我希望在引用此類時能夠具有編譯時安全性。
因此,是有辦法,我可以這樣做:我不認爲沒有一個實例,我可以做的GetType()
class Foo
{
}
tblBar.Include (Foo.GetType().ToString());
。有任何想法嗎?
有沒有辦法在C#中取得類名並將其轉換爲字符串?以C#中字符串的形式獲取類的名稱
作爲實體框架的一部分,.Include方法需要在執行查詢時加入點分隔的字符串列表。我有我想要加入的類模型,由於重構和未來代碼維護的原因,我希望在引用此類時能夠具有編譯時安全性。
因此,是有辦法,我可以這樣做:我不認爲沒有一個實例,我可以做的GetType()
class Foo
{
}
tblBar.Include (Foo.GetType().ToString());
。有任何想法嗎?
Include requires a property name,不是類名。因此,它是您想要的財產的名稱,而不是其類型的名稱。 You can get that with reflection。
無法使用.GetType()
,因爲GetType
是一種方法。
你可以從類型的名字雖然是這樣的:
typeof(Foo).Name
正如克里斯指出的那樣,如果你需要的裝配合格的名稱,你可以使用
typeof(Foo).AssemblyQualifiedName
typeof(Foo).ToString()
?
您可以使用DbSet<contact>
代替ObjectSet<contact>
,所以你可以使用lambda作爲一個參數,如tblBar.Include(a => a.foo)
你也可以做這樣的事情:
Type CLASS = typeof(MyClass);
然後你可以訪問名稱,名稱空間等。
string CLASS_NAME = CLASS.Name;
string NAMESPACE = CLASS.Namespace;
另一種使用反射的替代方法是使用MethodBase類。
在您的示例中,您可以添加一個靜態屬性(或方法),爲您提供所需的信息。喜歡的東西:
class Foo
{
public static string ClassName
{
get
{
return MethodBase.GetCurrentMethod().DeclaringType.Name;
}
}
}
這將允許你使用它,而不會產生類型的實例:
tblBar.Include(Foo.ClassName);
其中在運行時會給你:
tblBar.Include("Foo");
感謝克雷格,我我發現這也有幫助:http://msmvps.com/blogs/matthieu/archive/2008/06/06/entityframework-include-with-func.aspx – Jared 2011-02-16 23:41:56