Сопоставление с образцом с помощью Expression>C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Сопоставление с образцом с помощью Expression>

Сообщение Anonymous »

Рассмотрим следующий код:

Код: Выделить всё

internal static class Program
{
private static void Main()
{
object value = "Hello";
Console.WriteLine(value.Test(o => o is string));
}

private static bool Test(this T value, Expression test) =>
test.Compile().Invoke(value);
}
Результат:

Верно

Теперь сравните с этим кодом:

Код: Выделить всё

internal static class Program
{
private static void Main()
{
string? value = "Hello";
Console.WriteLine(value.Test(o => o is null)); // Compiler error
}

private static bool Test(this T value, Expression test) =>
test.Compile().Invoke(value);
}
Результат:

Дерево выражений не может содержать соответствующее шаблону выражение «is».

Мне любопытно, почему последний код выдает указанную выше ошибку компилятора, а первый - нет, хотя он тоже является выражением 'is', соответствующим шаблону; т. е. почему сопоставление типов разрешено, а совпадение значений NULL — нет?
Примечание: я знаю, что могу использовать Func вместо Expression но это выходит за рамки данного вопроса.

Подробнее здесь: https://stackoverflow.com/questions/791 ... funct-bool
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»