Vb.net Список инициализаторов объектов (из T)
Я искал код С#:
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?
Ответы
Ответ 1
РЕДАКТИРОВАТЬ (2)
Как отмечалось в комментариях, инициализаторы коллекции VB.NET теперь введены, и многие из следующих сообщений следует считать устаревшими.
ИЗМЕНИТЬ
Не всегда слепо доверять конвертеру С# в VB.NET
Здесь удобный инструмент для онлайн-конверсии
Выключается У VB.NET нет инициализаторов коллекции. Это означает, что нет эквивалентности
var myList = new List<string>()
{
"abc",
"def"
};
... но у него есть инициализаторы объектов. Таким образом, вы можете создать экземпляр класса и назначить значения его свойствам за один раз, но вы не можете создать экземпляр списка и добавить элементы ко всему этому за один раз.
Ближайший вы можете найти в ссылке выше. Вы можете создать массив и добавить к нему элементы за одну операцию, а затем вы должны 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()
Ответ 2
Инициализаторы коллекции были добавлены в 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 _
} _
}
Ответ 3
Как насчет этого?
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()