vb.net Список инициализаторов объектов (Of T) - PullRequest
15 голосов
/ 15 июля 2010

Я искал какой-то код C #:

List<Employee> Employees = new List<Employee>{
    new Employee{firstname="Aamir",lastname="Hasan",age=20},
    new Employee{firstname="awais",lastname="Hasan",age=50},
    new Employee{firstname="Bill",lastname="Hasan",age=70},
    new Employee{firstname="sobia",lastname="khan",age=80},  
    };

Теперь, когда я преобразовываю это в vb.net

Dim Employees as List(Of Employee) = New List(Of Employee)() With { New Employee() With { _  
.firstname = "Aamir", _  
.lastname = "Hasan", _   
.age = 20 _  
}, _  
New Employee() With { _  
.firstname = "awais", _  
.lastname = "Hasan", _  
.age = 50 _  
}, _  
New Employee() With { _  
.firstname = "Bill", _  
.lastname = "Hasan", _  
.age = 70 _  
}, _  
New Employee() With { _  
.firstname = "sobia", _  
.lastname = "khan", _  
.age = 80 _  
} _  
}  

Я получаю ошибкуинициализированный в объекте инициализатор должен начинаться с '.'. "

Теперь я могу получить массив сотрудников, используя код:

Dim Employees = { New Employee() With { _  
.FirstName = "Aamir", _  
.LastName = "Hasan", _   
.Age = 20}, _  
New Employee() With { _    
.FirstName = "Awais", _   
.LastName = "Hasan", _  
.Age = 50}, _
New Employee() With { _
.FirstName = "Bill", _ 
.LastName = "Hasan", _  
.Age = 70 _
} _  
}    

Но я бы хотел List(Of Employee)меня беспокоит, почему это не работает в vb.net?

Ответы [ 3 ]

19 голосов
/ 02 января 2011

Инициализаторы коллекции были добавлены в VB.NET 2010 . Это воздушный код, но здесь идет:

Dim Employees as List(Of Employee) = New List(Of Employee)() From
{ 
    New Employee() With { _   
       .firstname = "Aamir", _
       .lastname = "Hasan", _ 
       .age = 20 _   
    }, _
   New Employee() With { _  
       .firstname = "awais", _  
       .lastname = "Hasan", _ 
       .age = 50 _ 
    }, _ 
   New Employee() With { _ 
       .firstname = "Bill", _ 
       .lastname = "Hasan", _ 
       .age = 70 _ 
    }, _  
   New Employee() With { _ 
       .firstname = "sobia", _ 
       .lastname = "khan", _ 
       .age = 80 _ 
    } _ 
}   
18 голосов
/ 15 июля 2010

РЕДАКТИРОВАТЬ (2)
Как отмечалось в комментариях, Инициализаторы коллекций VB.NET уже введены, и многие следующие посты следует считать устаревшими.

EDIT
Не всегда слепо доверять конвертеру C # в VB.NET
Вот удобный инструмент для онлайн-конвертации

Оказывается VB.NET не имеет инициализаторов коллекции . Это означает, что нет эквивалента

var myList = new List<string>()
{
   "abc",
   "def"
};

... но имеет инициализаторы объекта. Таким образом, вы можете создать экземпляр класса и присвоить значения его свойствам за один раз, но вы не можете создать экземпляр списка и добавлять элементы к нему за один раз.

Там самое близкое, что вы можете получить, находится по ссылке выше. Вы можете создать Array и добавить к нему элементы за одну операцию, а затем вам нужно ToList этот массив.

Так что на этот раз я фактически сам скомпилировал код, и он работает. Извините за хлопоты

    Dim EmployeesTemp As Employee() = { _
        New Employee() With { _
            .firstname = "Aamir", _
            .lastname = "Hasan", _
            .age = 20 _
        }, _
        New Employee() With { _
            .firstname = "awais", _
            .lastname = "Hasan", _
            .age = 50 _
        }, _
        New Employee() With { _
            .firstname = "Bill", _
            .lastname = "Hasan", _
            .age = 70 _
        }, _
        New Employee() With { _
            .firstname = "sobia", _
            .lastname = "khan", _
            .age = 80 _
        } _
    }

    Dim Employees as List(Of Employee) = EmployeesTemp.ToList()
1 голос
/ 12 февраля 2017

Как насчет этого?

Dim Employees As List(Of Employee) = { _
  New Employee() With { .firstname = "Aamir", .lastname = "Hasan", .age = 20 }, _
  New Employee() With { .firstname = "awais", .lastname = "Hasan", .age = 50 }, _
  New Employee() With { .firstname = "Bill",  .lastname = "Hasan", .age = 70 }, _
  New Employee() With { .firstname = "sobia", .lastname = "khan",  .age = 80 } _
}.ToList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...