В c# SemanticModel есть способ отличить обнуляемый тип значения от ссылочного типа? - PullRequest
2 голосов
/ 07 марта 2020

Я пытаюсь написать пользовательский c# 8 рефакторинг для классов, использующих новый синтаксис, допускающий значение NULL.

Я определяю разницу между "фактическими" типами и "Nullable" типами, проверяя для "?" в конце имени типа.

Проблема в том, как мне узнать, каким переменным нужно значение ".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;}
}

Когда у меня есть модель symanti c, я могу получить информацию о символах, например:

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

Но для "actualInt" я вижу, что она имеет

symbolInfo.Type.Name == "Int32" (хорошо)

IsReferenceType == true (да?)

IsValueType == false (да?)

I ожидал увидеть IsValueType == true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...