2015-11-03 93 views
0

如何獲取作爲參數傳遞給方法的原始屬性名稱的名稱?從方法參數獲取原始屬性名稱

class TestA 
    { 
     public string Foo { get; set; } 

     public TestA() 
     { 
      Foo = "Bar"; 

      TestB.RegisterString(Foo); 
     } 
    } 

    class TestB 
    { 
     public static void RegisterString(string inputString) 
     { 
      // Here I want to receive the property name that was used 
      // to assign the parameter input string 
      // I want to get the property name "Foo" 
     } 
    } 
+2

不可能。你爲什麼需要它? –

+0

我想實現一些自動註冊命令的同名。 :/ –

回答

2

您可以使用nameof關鍵字添加參數。不知道爲什麼你會想要:

TestB.RegisterString(Foo, nameof(Foo)); 

這將通過"Foo"作爲第二個參數。沒有辦法使它自動化,所以你不需要自己調用nameof,這使得這樣做毫無用處。

如果您要從Foo屬性中調用此屬性,則可以使用CallerMemberNameAttribute,該名稱將顯示調用者的姓名。編譯器會設置正確的值,所以你不必在調用方法中自己提供這個值。

public static void RegisterString(string inputString 
           , [CallerMemberName] string caller = null 
           ) 
{ 
    // use caller here 
} 

這對我更有意義。

+0

感謝您的評論。屬性將是這個更乾淨的解決方案? –

+0

是的,但您需要將該代碼放在'Foo'中。不知道這是否是你想要的,但從我的角度來看它更好。 –

+1

值得一提的是['nameof'](https://msdn.microsoft.com/en-us/library/dn986596.aspx) - 關鍵字在VS 2015(C#6)中是新的, –