C# Почему мы не можем назначить анонимный метод делегата ключевому слову var - PullRequest
0 голосов
/ 02 августа 2020

Мне любопытно понять поведение var в этом конкретном сценарии.

var action = delegate (string s)
{
    Console.WriteLine(s);
};

Приведенный выше код возвращает ошибку компиляции

не может назначить анонимный тип неявно типизированной переменной

Почему C# компилятор не пытается назначить Action<string> делегат var?

Может быть, это базовый c вопрос, но все, что я хочу, это понять поведение.

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Я не знаю, почему, возможно, не реализовано, или какие-то проблемы с компилятором, чтобы это сделать.

Не забывайте, что делегаты - это сигнатуры / прототипы методов, а Action - типы, на самом деле это не одно и то же, даже если delegate можно преобразовать в Action или Func.

Следовательно, если вы хотите использовать ключевое слово var, вы можете преобразовать его, написав:

var action = (Action<string>)delegate(string s)
{
  Console.WriteLine(s);
};

Также вы можете просто использовать лямбда , чтобы получить более чистый код:

Action<string> action = str =>
{
  Console.WriteLine(str);
};

И только для одной инструкции:

Action<string> action = text => Console.WriteLine(text);
0 голосов
/ 02 августа 2020

Причина очень проста, потому что в приведенном ниже коде action не является типом delegate.

var action = delegate (string s)
{
    Console.WriteLine(s);
};

Вам нужно объявить action как delegate вот так.

public delegate void action(string value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...