Collections C#3收集问题

Collections C#3收集问题,collections,c#-3.0,Collections,C# 3.0,为什么在C#3中我可以这样做: DataTable dt = new DataTable() { Columns = { "1", "2", "3" } }; 但我不能这么做: class Person { int Id { get; set; } } class Program { static void Main(string[] args) { var v = new List<Person> { 1, 2, 3 };

为什么在C#3中我可以这样做:

 DataTable dt = new DataTable() {
 Columns = { "1", "2", "3" } };
但我不能这么做:

 class Person {
    int Id { get; set; }
}
class Program    {
    static void Main(string[] args)
    {
        var v = new List<Person> { 1, 2, 3 };
    }
}
班级人员{
int Id{get;set;}
}
班级计划{
静态void Main(字符串[]参数)
{
var v=新列表{1,2,3};
}
}

1、2或3都不是Person对象

不过,您可以尝试:

var people = new List<Person>() { new Person() { Id = 1 }, new Person() { Id = 2 } , new Person() { Id = 3 } };
var people=newlist(){new Person(){Id=1},new Person(){Id=2},new Person(){Id=3};

因为and integer与
Person
对象不同,而
Id
是需要分配给的属性

var v = new List<Person>();
for (i = 1; i <= 3; i++) {
    var p = new Person() {
        Id = i;
    }
    v.Add(p);
}
var v=新列表();

对于(i=1;i,因为不存在从int到Person的隐式转换。如果要为Person定义隐式转换,应该可以:


请注意,在示例中,双精度值可以隐式转换为数字类型。您可以定义int到Person的隐式转换。

您需要调用构造函数来实际执行它。在代码中,您基本上是说Person是int类型,而不是这种情况,其中的变量是

你可以这样做来实现你想要的

var v = new List<Person>() { new Person(1), new Person(2), new Person(3) };

问题是:为什么在第一种方法中我不需要实例化新的数据列。为什么C#理解“1”、“2”和“3”作为DataColumn对象是由于我在回答中提到的隐式转换。因为数据表没有显式定义对象类型。@Rodolfo哦,您可以执行DataTable/Columns one,因为列可以保存字符串变量,就像您的示例中一样。
 public Person(int id)
 {
     Id = id;
 }