使用 Roslyn 分析匿名类型中的可空性
Analyze nullability inside anonymous types with Roslyn
这是我想用 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
属性 不可为 null 而 Second
可为 null 的信息?
最终证明它确实如您所愿。
我被 Roslyn 限制愚弄了很长时间:LINQ 表达式松散的可空性注释(截至 2020 年 4 月),那是我的测试用例:(
这是我想用 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
属性 不可为 null 而 Second
可为 null 的信息?
最终证明它确实如您所愿。
我被 Roslyn 限制愚弄了很长时间:LINQ 表达式松散的可空性注释(截至 2020 年 4 月),那是我的测试用例:(