首页 > 解决方案 > 在 c# SemanticModel 中,有没有办法从引用类型中分辨出可为空的值类型?

问题描述

我正在尝试对使用新的可为空语法的类编写自定义 c# 8 重构。

我通过检查“?”来区分“实际”类型和“可空”类型之间的区别。在类型名称的末尾。

问题是我如何知道哪些变量需要“.Value”来获取值,哪些变量不需要?

例如:

#nullable enable

public class C 
{
   public int actualInt {get; set;}
   public int? nullableInt {get; set;}
   public string actualString {get; set;}
   public string? nullableString {get; set;}
}

一旦我有了语义模型,我就可以得到这样的符号信息:

IPropertySymbol symbolInfo = SemanticModel.GetDeclaredSymbol(property) as IPropertySymbol;

但是对于“actualInt”,我看到它有

symbolInfo.Type.Name == "Int32"(好)

IsReferenceType == true(嗯?)

IsValueType == false(嗯?)

我本来希望看到 IsValueType == true

标签: c#refactoringnullable

解决方案


推荐阅读