这是我想用 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可以为空的信息?