我如何在 c# 中启动一个没有任何值的匿名类型?

How can i initiate an anonymous type without any value in c#?

我有一个匿名类型,它是 new {string a, string b} 的匿名对象

var myObject = select new {
                   a = "a",
                   b = "b"
               } 

我想在不输入任何信息的情况下初始化该对象。

例如。

Anonymouse{string, string} myObject = new Anonymous;

我被困在这个问题上,希望得到一些帮助。

匿名类型包含 只读 属性。因此,如果您希望您的对象包含属性,则需要在创建它们时初始化您的属性,因为它们无法修改。

如前所述here

Anonymous types contain one or more public read-only properties.

将匿名类型视为一种节省定义整个 class(语法糖)的类型的方法。如果您创建一个匿名类型而没有将任何信息放入其中,如下所示:

var myObject = new {}

编译器在后台创建以下类型:

class __Anonymous
{
    public Anonymous() {}
    public override bool Equals(object o) { … }
    public override int GetHashCode() { … }
}

但是,您不能稍后添加属性,这就是为什么您需要在创建匿名类型时初始化属性。

你不能。匿名类型由编译器生成,是语法糖。因此,匿名类型的结构和匿名类型的 属性 值一旦创建就不能更改。

如果您需要声明一个空的动态结构并在稍后添加属性,一种可能的替代方法是使用 dynamic:

dynamic myObject = new ExpandoObject();
// at a later point
myObject.a = "a";

如果您只想创建一个没有任何属性的匿名类型,这是可行的,只需在初始化期间省略属性即可。但是,您以后将无法更改结构:

var myObject = new {};

值得指出的是,类似的语法和功能被提议作为 C#7 中元组的扩展。

var ll = new (double lat, double lng) { };
lat = 0; 
lng = 0;

或C#7元组解构:

(var first, var middle, var last) = LookupName(id1);

请记住,C#7 features 仍在不断变化,可能会在发布前发生变化。

没有声明属性的匿名类型是不可能的,即使是,它也是无用的,就像杰西的回答状态。然而,还有另一种类型可能会满足您的需求 - 元组。

var value = new Tuple<string, string>();

// later...

value.Item1 = "a string";
value.Item2 = "another string";