C # 3 проблема сбора - PullRequest
       12

C # 3 проблема сбора

2 голосов
/ 13 мая 2011

Почему в 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 };
    }
}

Ответы [ 4 ]

4 голосов
/ 13 мая 2011

Потому что нет неявного преобразования из int в Person.Если вы должны определить неявное преобразование для Person, это должно сработать:

http://msdn.microsoft.com/en-us/library/z5z9kes2(v=VS.100).aspx

Обратите внимание, что в примере двойное значение неявно преобразуется в тип Digit.Вы можете определить неявное преобразование для int в Person.

0 голосов
/ 13 мая 2011

Вам нужно вызвать конструктор, чтобы фактически создать его экземпляр.В своем коде вы в основном говорите, что Person имеет тип int, а это не так, переменная внутри:.

Вы можете сделать что-то подобное, чтобы достичь того, что вы хотите.

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

Учитывая, что у вас есть конструктор, который принимает int.

Как этот:

 public Person(int id)
 {
     Id = id;
 }
0 голосов
/ 13 мая 2011

Потому что и целое число не совпадает с объектом Person, а Id - это свойство, которое необходимо назначить.

var v = new List<Person>();
for (i = 1; i <= 3; i++) {
    var p = new Person() {
        Id = i;
    }
    v.Add(p);
}
0 голосов
/ 13 мая 2011

Ни 1, ни 2, ни 3 не являются объектами Person.

Вы можете, хотя и попробовать:

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