【发布时间】:2018-12-27 16:02:46
【问题描述】:
我正在构建一个代码重构工具,在该工具中,我使用来自 Roslyn API 的令牌/节点获取两种变量类型。
我需要比较和验证这两种类型是否相同。
其他一些问题,例如this,如果您有对象,则可以使用,但是在这种情况下我需要使用字符串并比较类型。这是我的方法,适用于typeName = "int",但是当typeName="List<int>" 我得到null
public static Type GetType(string typeName)
{
string clrType = null;
if (CLRConstants.TryGetValue(typeName, out clrType))
{
return Type.GetType(clrType);
}
var type = Type.GetType(typeName);
if (type != null) return type;
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
type = a.GetType(typeName);
if (type != null)
return type;
}
return null;
}
private static Dictionary<string, string> CLRConstants { get{
var dct = new Dictionary<string, string>();
dct.Add("int", "System.Int32");
return dct;
} }
【问题讨论】:
-
这段代码有问题吗?您能否将edit 该信息纳入您的问题?
-
如果 typeName 是 "List
" 我得到空值 -
您的意思是要首先意识到
List<...>是通用的,然后查找它,然后查找int并构造List<int>?还是什么? -
这与我的问题完全无关,但是......你设置了我的强迫症,
a是一个糟糕的名字 -
@TheGeneral 将
GetAssemblies调用结果缩短为 3 个字母的标准方法看起来不专业...所以在 这种情况下 中的a是可以的 :)
标签: c# reflection roslyn