【发布时间】:2020-11-18 13:04:25
【问题描述】:
我想分析一个使用“可空枚举”来决定的 switch 语句。 我想分析以下课程:
namespace Common.Model.Schema
{
public enum ModuleType
{
Case1,
Case2,
Case3
}
}
namespace Analyzer.Test
{
using Common.Model.Schema;
public class Test
{
private static void GetSelectedAblageOrdner()
{
ModuleType? moduleType = null;
switch (moduleType)
{
case ModuleType.Case1:
{
break;
}
}
}
}
}
当开关的输入不可可以为空时,我可以使用以下代码并且我有正确的类型来进行分析。
TypeInfo typeInfo = context.SemanticModel.GetTypeInfo(expression);
ITypeSymbol expressionType = typeInfo.ConvertedType;
if (!(expressionType is INamedTypeSymbol namedType))
{
return;
}
switch (namedType.EnumUnderlyingType.Name)
{
// do stuff
}
但是对于可为空的枚举,convertedType 是Nullable<ModuleType>(或者换句话说ModuleType?)。这使得属性EnumUnderlyingType 等为NULL。我需要实际的枚举,以便继续。
如何访问ModuleType,以便继续我对不可为空枚举的默认算法?
【问题讨论】: