簡體   English   中英

如何在類內部獲取對象的變量名?

[英]How to get variable name of object inside class?

我有一個類A ,它在BObject變量中存儲對對象B引用。

public class A
{
    public B BObject;
}

我想在B類構造函數中獲取BObject (變量的名稱)。

有什么辦法嗎?

這樣做的目的:我想創建ODBCFramework並且要基於變量名獲取表名。 (就像在EntityFramework上下文中一樣)

更新:我想在C#5中處理它。

您可以使用C#-6 nameof運算符

var a = new A();
string bName = nameof(a.B);

請注意,通常嘗試中繼屬性/字段的運行時名稱以進行表查找似乎是個壞主意。

無法做您想做的事。

您找不到存儲對象引用的名稱,該信息根本不可用。

基本上,這是:

var x = new BObject();
// from inside BObject, get the name "x"

不可能。 您已經將其存儲在另一個對象的字段中的事實並沒有改變,這根本無法完成。

您需要一種方法來明確告知該對象應使用的表名。

您可以使用PropertyInfo類嗎?

var a = B.GetInfo().GetProperties();
foreach(PropertyInfo propertyInfo in a)
    string name = propertyInfo.Name

@Damien_The_Unbeliever給我一些解決問題的方法。 我試過了,而且行得通。

public class A
{
    public B BObject { get; set; }
    public A()
    {
        var BTypeProperties = this.GetType().GetProperties().Where(x => x.PropertyType == typeof(B));
        foreach (var prop in BTypeProperties)
        {
            prop.SetValue(this, new B(prop.Name));
        }
    }

}

public class B
{
    string _propName;
    public B(string propertyName)
    {
        _propName = propertyName;
    }
}

另外,要明確答案:@Yuval Itzchakov建議在C#6中解決方案是:

var a = new A();
string bName = nameof(a.B);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM