Я пытаюсь написать пользовательский 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