这是我想用 Roslyn 分析的一段代码:
object Method()
{
var rnd = new Random();
return new { First = "1", Second = rnd.NextDouble() > 0.5 ? "2" : null };
}
我想找出返回属性的可空性。我知道如何找到 theReturnStatementSyntax
和它的SemanticModel
.
我的问题是 C# 不会在匿名类型上创建可空性注释。上面的匿名类型是{ First: string, Second: string }
,没有注释。
我的理解是,对于匿名类型,编译器仅使用基于数据流分析的可空性(如果我错了,请纠正我)。悬停时Second
,VS 确实正确指示它string?
在此位置可以为空。
使用 Roslyn ( Microsoft.CodeAnalysis
),我如何提取返回的First
属性不可为空且Second
可以为空的信息?