使用 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 月),那是我的测试用例:(