CallerArgumentExpression всегда null

Я экспериментирую с [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 быть любым, кроме нуля.

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

2 ответа

Решение

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

См. Также https://github.com/dotnet/csharplang/issues/287, особенно внизу.

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

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