Вот фрагмент кода, который я хочу проанализировать с помощью Roslyn:
object Method()
{
var rnd = new Random();
return new { First = "1", Second = rnd.NextDouble() > 0.5 ? "2" : null };
}
Я хотел бы выяснить обнуляемость возвращаемых свойств. Я знаю, как найти ReturnStatementSyntax
и SemanticModel
.
. Моя проблема в том, что C# не создает аннулируемых аннотаций для анонимных типов. Приведенный выше анонимный тип - { First: string, Second: string }
, без аннотаций.
Насколько я понимаю, для анонимных типов компилятор использует обнуляемость, основанную только на анализе потока данных (поправьте меня, если я ошибаюсь). При наведении курсора Second
VS правильно указывает, что в этом месте он может иметь значение string?
.
Используя Roslyn (Microsoft.CodeAnalysis
), как я могу извлечь информацию о том, что возвращенное свойство First
не является обнуляемый и Second
обнуляемый?