C# C类列表实例初始化语法

C# C类列表实例初始化语法,c#,C#,我会用C写 var y = new List<string>(2) { "x" , "y" }; 只需使用以下语法初始化类的字段: // ... Car myCar1 = new Car () { Model = "Honda", YearBuilt=2009 }; Car myCar2 = new Car () { Model = "Toyota", YearBuilt=2011 }; // ... public class Car { public string

我会用C写

var y = new List<string>(2) { "x" , "y" };

只需使用以下语法初始化类的字段:

// ...

Car myCar1 = new Car () { Model = "Honda", YearBuilt=2009 };
Car myCar2 = new Car () { Model = "Toyota", YearBuilt=2011 };

// ...

public class Car {

    public string Model;
    public int YearBuilt;
}

只需使用以下语法初始化类的字段:

// ...

Car myCar1 = new Car () { Model = "Honda", YearBuilt=2009 };
Car myCar2 = new Car () { Model = "Toyota", YearBuilt=2011 };

// ...

public class Car {

    public string Model;
    public int YearBuilt;
}

参见C规范第7.6.10.3节:

应用集合初始值设定项的集合对象 必须是实现System.Collections.IEnumerable或 发生编译时错误。对于顺序中的每个指定元素 集合初始值设定项使用 元素初始值设定项的表达式列表作为参数列表, 为每个调用应用正常重载解析。因此 集合对象必须包含适用于每个集合的Add方法 元素初始值设定项

这是一个非常简单的例子:

   class AddIt : IEnumerable
   {
      public void Add(String foo) { Console.WriteLine(foo); }

      public IEnumerator GetEnumerator()
      {
         return null; // in reality something else
      }
   }

   class Program
   {
      static void Main(string[] args)
      {
         var a = new AddIt() { "hello", "world" };

         Console.Read();
      }
   }

这将在控制台上打印hello,然后是world。

请参阅C规范第7.6.10.3节:

应用集合初始值设定项的集合对象 必须是实现System.Collections.IEnumerable或 发生编译时错误。对于顺序中的每个指定元素 集合初始值设定项使用 元素初始值设定项的表达式列表作为参数列表, 为每个调用应用正常重载解析。因此 集合对象必须包含适用于每个集合的Add方法 元素初始值设定项

这是一个非常简单的例子:

   class AddIt : IEnumerable
   {
      public void Add(String foo) { Console.WriteLine(foo); }

      public IEnumerator GetEnumerator()
      {
         return null; // in reality something else
      }
   }

   class Program
   {
      static void Main(string[] args)
      {
         var a = new AddIt() { "hello", "world" };

         Console.Read();
      }
   }

这将打印hello,然后是world到控制台。

正如Marcus指出的那样,该类必须实现IEnumerable接口,并且有一个Add方法可供调用方访问

简而言之,此框架示例将起作用:

public class MyClass : IEnumerable
{
    public void Add(string item)
    {

    }

    public IEnumerator GetEnumerator()
    {
        throw new NotImplementedException();
    }
}

正如Marcus指出的,该类必须实现IEnumerable接口,并具有调用方可访问的Add方法

简而言之,此框架示例将起作用:

public class MyClass : IEnumerable
{
    public void Add(string item)
    {

    }

    public IEnumerator GetEnumerator()
    {
        throw new NotImplementedException();
    }
}

我不确定2,3代表什么。我知道第一行是你的收藏量。您可以简单地从列表或任何您需要模仿的结构继承

刚刚在LinqPad中测试了此样本:

void Main()
{
    var list = new Foo{
        "a",
        "b"
    };

    list.Dump();
}

class Foo : List<string>{ }

我不确定2,3代表什么。我知道第一行是你的收藏量。您可以简单地从列表或任何您需要模仿的结构继承

刚刚在LinqPad中测试了此样本:

void Main()
{
    var list = new Foo{
        "a",
        "b"
    };

    list.Dump();
}

class Foo : List<string>{ }

虽然这并不是所要求的,但了解对象初始化可能很有用。对象初始化与集合初始化完全不同。虽然语法相似,但概念和实现却完全不同。虽然这并不是所要求的,但了解对象初始化可能很有用。对象初始化与集合初始化完全不同。虽然语法相似,但概念和实现却完全不同。这是为什么?它之所以有效,是因为您只需要有一个与集合初始值设定项中的项匹配的Add方法,并且List有一个Add方法。Right。我想要的是一个简单的答案:-为什么这样做有效?它之所以有效,是因为您只需要有一个与集合初始值设定项中的项匹配的Add方法,并且List有一个Add方法。Right。我想得到一个简单的答案:-