我是googling試圖找到一種方法來呼叫Control.DataBindings.Add
而不使用字符串文字,但從屬性本身獲得屬性名稱,我認爲這不太容易出錯,至少對於我的具體情況,因爲我通常讓Visual Studio重命名屬性時進行重命名。所以我的代碼看起來像DataBindings.Add(GetName(myInstance.myObject)...
而不是DataBindings.Add("myObject"...
。所以,我發現這一點:這是爲什麼這樣工作?
static string GetName<T>(T item) where T : class
{
var properties = typeof(T).GetProperties();
if (properties.Length != 1) throw new Exception("Length must be 1");
return properties[0].Name;
}
這將被調用,假設我有一個名爲One
財產,是這樣的:string name = GetName(new { this.One });
這會給我"One"
。我不知道它爲什麼會起作用以及是否可以安全地使用它。我甚至不知道new { this.One }
的含義。我不知道在這種情況下,可能發生的是properties.Length
不是1
順便說一句,我只是測試,以我的財產重新命名One
到Two
和Visual Studio打開new { this.One }
爲new { One = this.Two }
,其與GetName
使用時函數給了我"One"
,這使得整個事物無用,因爲我將傳遞給Control.DataBindings.Add
的名稱在重命名屬性後仍然是「一」。
我不能相信VS被髮射`新{this.One}`,除非你在第一個PL使用匿名類高手。 – leppie 2011-01-14 08:53:35
另請參閱http://stackoverflow.com/questions/1329138/how-to-make-databinding-type-safe-and-support-refactoring – 2011-01-14 11:42:00