是否有任何方法來動態設置匿名類型的屬性名稱?動態設置C#匿名類型的屬性名稱
通常我們會做這樣的:
var anon = new { name = "Kayes" };
現在,我想動態設置屬性的名稱(或標識),所以這個名字可能來自一個XML文件或數據庫。
謝謝你們的答案。不,我的需求絕對不值得所有繁瑣的選擇。我只是想讓我的代碼符合由我的團隊負責人開發的現有庫。但我們決定更新庫來支持字典類型,以便輕鬆解決。
皮特,我真的很興奮,瞭解動態類型在.NET 4.0中
感謝。
是否有任何方法來動態設置匿名類型的屬性名稱?動態設置C#匿名類型的屬性名稱
通常我們會做這樣的:
var anon = new { name = "Kayes" };
現在,我想動態設置屬性的名稱(或標識),所以這個名字可能來自一個XML文件或數據庫。
謝謝你們的答案。不,我的需求絕對不值得所有繁瑣的選擇。我只是想讓我的代碼符合由我的團隊負責人開發的現有庫。但我們決定更新庫來支持字典類型,以便輕鬆解決。
皮特,我真的很興奮,瞭解動態類型在.NET 4.0中
感謝。
不是沒有大量的反思,可能比你對利用你正在做的事情感興趣。也許你應該考慮使用一個字典,其中鍵值是屬性名稱。
編譯器必須知道屬性名稱,否則它不能爲您創建匿名類型。
所以,不,這是不可能的,除非實際的屬性名在編譯時已知(通過一些由VS生成的數據庫或其他東西)。
這是不可能的,因爲即使該類型是匿名的,它也不是動態類型。它仍然是一個靜態類型,並且在編譯時必須知道它的屬性。
您可能想要查看.NET 4.0「dynamic」關鍵字以生成真正的動態類。
動態性能可與compiling code at runtime進行,但是這將是矯枉過正滿足您的需求我想...
都能跟得上。你想從動態信息構造一個靜態結構。不行,想想吧。爲你的情況使用一本字典。
如前所述,您不能更改屬性名稱;例如,你會如何對它進行編碼?但是,如果這用於數據綁定,則可以在運行時執行一些技巧來彎曲屬性的顯示名稱,例如ICustomTypeDescriptor
/TypeDescriptionProvider
(和自定義PropertyDescriptor
)。
很多工作;那就需要真的是值得的......
另一種選擇是一個自定義屬性:
using System;
using System.ComponentModel;
using System.Windows.Forms;
class MyDisplayNameAttribute : DisplayNameAttribute {
public MyDisplayNameAttribute(string value) : base(value) {}
public override string DisplayName {
get {
return @"/// " + base.DisplayNameValue + @" \\\";
}
}
}
class Foo {
[MyDisplayName("blip")]
public string Bar { get; set; }
[STAThread]
static void Main() {
Application.EnableVisualStyles();
using (Form form = new Form {
Controls = {
new PropertyGrid {
Dock = DockStyle.Fill,
SelectedObject = new Foo { Bar = "abc"}}
}
}) {
Application.Run(form);
}
}
}
對於最近的C#版本,請參閱:http://stackoverflow.com/questions/3740021/how -to-動態新的匿名級 – nawfal 2015-07-30 09:36:22