0

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

4

1 回答 1

0

最后,事实证明它确实按您的预期工作。

我被 Roslyn 的限制愚弄了很长时间:LINQ 表达式松散可空性注释(截至 2020 年 4 月),这就是我的测试用例 :(

于 2020-04-10T17:29:15.807 回答