Эквивалент C # анонимных внутренних классов Java с блоками инициализации

StackOverflow https://stackoverflow.com/questions/535720

Вопрос

В Java мне нравится использовать такие конструкции, как

List<String> list = new ArrayList<String>() {{add("foo");}};

Есть ли способ сделать это в 1 строке и в C # тоже?

Это было полезно?

Решение

Я думаю, что вам нужен инициализатор массива

List<string> list = new List<string>() { "foo" };

Несколько элементов должны быть разделены запятыми

List<string> list = new List<string>() { "foo","bar","bas"};

Другие советы

Это называется инициализатор коллекции и это часть C # 3.0.

Помимо списков, вы можете инициализировать коллекции более сложных типов, при условии, что они реализуют IEnumerable и имеют соответствующие методы добавления для каждого элемента в инициализаторе коллекции.Например, вы можете использовать Add(key, value) способ Dictionary<TKey, TValue> вот так:

var dict = new Dictionary<string, int> 
{ 
    {"first", 10 }, 
    {"second", 20 }
};

Более подробную информацию можно найти в главе 8 C # in Detail, которую можно бесплатно загрузить с Веб-сайт Мэннинга.

Вы можете сделать это в .NET 3.5, чтобы задать значения свойств:

List<string> list = new List<string> () { Property = Value, Property2 = Value2 };

Или для инициализации массива:

List<string> list = new List<string> () { "value1", "value2" };

Однако вы не можете вызывать методы таким образом.

Если вам просто нужно разобраться с добавлением объектов в коллекцию, то инициализаторы коллекции отлично работают, но если вам нужно выполнить дополнительную статическую инициализацию, вы можете использовать нечто, называемое статическим конструктором, который работает так же, как статический инициализатор в java

Это имеет плохое форматирование, но, кажется, покрывает его

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top