2011-05-13 59 views
2

为什么在C#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 }; 
    } 
} 

回答

0

无论是1,还是2,也不3 Person对象。

你可以,但尝试:

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

由于和整数是不一样的Person对象,而Id是需要被分配到一个属性。

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

的问题是:为什么在第一种方法我不需要例如新dataColumns。为什么C#在DataColumn对象中加上“1”,“2”和“3” – Rodolfo 2011-05-13 16:29:17

+0

因为我在答案中提到了隐式转换。 – Jeff 2011-05-13 16:29:57

+0

因为数据表没有明确定义对象类型。 – 2011-05-13 16:30:19

0

您需要调用构造函数来实际实例化它。在你的代码中,你基本上是说Person是int类型的,事实并非如此,里面的变量是。

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

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

鉴于您有一个接受int的构造函数。

赞一个:

public Person(int id) 
{ 
    Id = id; 
} 
+0

@Rodolfo哦,你可以做DataTable/Columns之一,因为Columns可以容纳字符串变量,就像在你的例子中那样。 – triangulito 2011-05-13 16:30:53