我在做我的工作時遇到了一個問題,那就是將軟件從AS3移植到.NET/Mono。在AS3的代碼庫,我可以找到很多Object
聲明說都是這樣初始化:爲什麼你不能聲明一個字段和屬性具有匿名類型?
private const MAPPING:Object =
{
ssdungf:'flydung',
ssdungt:'flydung',
superfutter:'superfeed'
}
最好的選擇,我會使用匿名類型像這樣在C#:
var MAPPING = new
{
ssdungf = "flydung",
ssdungt = "flydung",
superfutter = "superfeed"
};
的問題是..那麼,讓我引用MSDN(source):
你不能聲明一個字段,屬性,事件或方法的返回類型爲具有匿名類型
但他們不說爲什麼。
所以問題仍然存在:爲什麼你不能聲明一個字段和屬性具有匿名類型?爲什麼.NET創作者從該選項中剝離它?
我從這裏得到警告,我的問題看起來很主觀,但我認爲它根本就不是 - 需要有客觀的理由。
至於我,我沒有看到任何障礙,但不知何故它不被支持。由於編譯器可以很容易地爲類的字段或屬性生成類型,與本地變量相同。
我的選擇是使用dynamic
類型,但不幸的是我正在使用的單聲道引擎被剝離。
而且對我的選擇是使用對象類型和使用後反射來查找這些字段:
private static readonly object MAPPING = new
{
ssdungf = "flydung",
ssdungt = "flydung",
superfutter = "superfeed"
};
但是,使用反射是這種情況是骯髒的,我會說。
我試圖找到答案,但我真的沒有找到任何答案。這裏有一些SO回答類似的問題,但他們沒有回答爲什麼:
Can a class property/field be of anonymous type in C# 4.0?
Declaring a LIST variable of an anonymous type in C#
How do you declare a Func with an anonymous return type?
@HimBromBeere真的,我沒有想過,但仍然是領域。 –