Начиная с C ++ 11, можно написать что-то вроде
#include <vector>
#include <string>
struct S
{
S(int x, const std::string& s)
: x(x)
, s(s)
{
}
int x;
std::string s;
};
// ...
std::vector<S> v;
// add new object to the vector v
// only parameters of added object's constructor are passed to the function
v.emplace_back(1, "t");
Есть ли в C # аналог функций C ++, например emplace
или emplace_back
для контейнерных классов (System.Collections.Generic.List
)?
Обновление. В C # аналогичный код может быть записан как list.EmplaceBack(1, "t");
вместо list.Add(new S(1, "t"));
. Было бы неплохо не запоминать имя класса и каждый раз писать new ClassName
в таких ситуациях.
struct
это будет немного быстрее. Для большихstruct
типов данных это, вероятно, будет быстрее. Ноstruct
типы данных не должны быть большими, так что это было бы решением для поиска проблемы :-) - person xanatos   schedule 14.03.2016v.insert(S(1, "t"));
на C ++. В C # это может быть написано какlist.EmplaceBack(1, "t");
вместоlist.Add(new S(1, "t"));
. - person Constructor   schedule 14.03.2016EmplaceBack
вам не нужно будет писатьnew ClassName
каждый раз. - person Constructor   schedule 14.03.2016C#
реализацию и указали, что с ней не так. - person Sinatr   schedule 14.03.2016Add
. 3) Для такой функции можно выбрать более короткое имя. - person Constructor   schedule 14.03.2016