我的代码:
Type type = GetType(long?);
或
Type type = typeof(long?);
给出“类型”,我怎样才能得到字符串“long?”回来?
答案 0 :(得分:4)
你无法得到它的内容。这只是一种语言速记。
ToString()
应生成“System.Nullable .1 [System.Int64]”
如果你需要它作为一个字符串,你可以建立一个字典。
var types = new Dictionary<Type, string>();
types.Add(typeof(long?), "long?");
但是,您无法检测到这一点。
types.Add(typeof(System.Nullable<long>), "System.Nullable<long>");
自typeof(long?) == typeof(System.Nullable<long>)
答案 1 :(得分:0)
你试过这个吗?
Type type = typeof(long?);
Console.WriteLine(type.FullName);
但是你不会得到字符串Long,因为每个基元类型都有别名。这些别名不会显示在Type系统上。
您应该为此语句获取System.Nullable`1 [System.Int64]。您必须自定义代码以获取正确的输出字符串
答案 2 :(得分:0)
您可以使用Type的Name属性,但这不会返回“long?”。 long是System.Int64类型的语法语法糖。
答案 3 :(得分:0)
您想要询问类型的通用参数,例如:
typeof(long?).GetGenericArguments().First().Name
但是,这会返回系统类型名称,而不是c#名称。
即Int64
而非long
答案 4 :(得分:0)
这是不可能的。
Type type = typeof(long?);
只是与ValueType
不同的类型。
System.ValueType
来自System.Object
,而不是System.Type
。
long?
只是写System.Nullable<long>
的一种奇特方式,因此它的类型不是long?
,如果你想获得它的类型,那么你将不得不解析它自己。
如果您希望从System.Nullable<T>
获取类型到T
的类型,那么此代码将有效:
Type t = typeof(long?);
t = t.FullName.StartsWith("System.Nullable") ? t.GenericTypeArguments[0] : t;
// t == typeof(long);