Не удается неявно преобразовать тип 'void' в 'System.Collections.Generic.Dictionary<string, bool>

Этот код работает нормально

Dictionary<string, bool> test = new Dictionary<string, bool>();
        test.Add("test string", true);

Следующий код выдает эту ошибку: Не удается неявно преобразовать тип 'void' в 'System.Collections.Generic.Dictionary

Dictionary<string, bool> test = new Dictionary<string, bool>().Add("test string", true);

Зачем? в чем разница?

4 ответа

Решение

Тип возврата .Add является void

Если вы объединяете вызовы, последнее выражение становится возвращаемым значением всего оператора.

Возвращаемое значение new Dictionary<K, V>() является Dictionary<K, V>тогда вы звоните .Add на это и .Add ничего не возвращает (void)

Вы можете использовать синтаксис инициализатора объекта, чтобы сделать это встроенным:

Dictionary<string, bool> test = new Dictionary<string, bool> 
{ 
    { "test string", true } 
};

Редактировать: больше информации, множество свободно распространяемых синтаксических фреймворков вернет объект, для которого вы вызвали метод, чтобы вы могли связать:

например

public class SomeFluentThing 
{
   public SomeFluentThing DoSomething()
   {
       // Do stuff
       return this;
   }

   public SomeFluentThing DoSomethingElse()
   {
       // Do stuff
       return this;
   }

}

Таким образом, вы можете цепью естественно:

SomeFluentThingVariable.DoSomething().DoSomethingElse();

Тип возврата для Add() является void

так new Dictionary<string, bool>().Add("test string", true); является недействительным, что вы назначаете Dictionary<string, bool> test, который вызвал вашу ошибку.

Dictionary<string, bool> test = new Dictionary<string, bool>();
test.Add("test string", true);

с другой стороны, назначает новый Dictionary в test и последний выполняет Add

Тип возвращаемого значения Add() Метод не является объектом класса Dictionary. Также вы не можете назначить выходные данные метода Add() для тестового объекта.

например, вы не можете использовать этот код:

Dictionary<string, bool> test = new Dictionary<string, bool>();
test = test.Add("test string", true); // Error

Как сказал Али Сефри.Х, пока

new Dictionary<string, bool>();

возвращать экземпляр Dictionary, поэтому ваша новая переменная может быть назначена ему, метод Add добавляет новое значение в новый словарь и возвращает void, поэтому не может быть назначен вашей новой переменной

Другие вопросы по тегам