2011-05-13 63 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