Выражение callerargument всегда равно нулю

#c# #.net-core #c#-8.0

#c# #.net-ядро #c #-8.0

Вопрос:

Я экспериментирую с [CallerArgumentExpression] в C # 8:

 static void Main(string[] args)
{
    try
    {
        Program query = null;
        Argument(query != null, "Ooops");
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
}

public static void Argument(bool condition, string message, [CallerArgumentExpression("condition")] string conditionExpression = null)
{
    if (!condition) throw new ArgumentException(message: message, paramName: conditionExpression);
}
  

Однако я не могу получить значение conditionExpression , отличное от null .

Я использовал это https://blog.mcilreavy.com/articles/2018-08/caller-argument-expression-attribute и еще несколько страниц, и, конечно, хороша как путеводитель, но я не могу заставить ее работать.

Комментарии:

1. Еще не реализовано , даже в C # 9.

Ответ №1:

Эта страница https://www.c-sharpcorner.com/article/c-sharp-8-features / утверждает, что он так и не добрался до C # 8 и теперь является C # Next.

Смотрите также https://github.com/dotnet/csharplang/issues/287 особенно в нижней части.

Комментарии:

1. Похоже, это произойдет в C # 10. (Примерно в ноябре, так что всего через несколько недель)

Ответ №2:

Эта функция была реализована в компиляторе Roslyn, который поддерживает C # 10, даже если вы не используете C # 10.