我的代码:
Type type = GetType(long?);
或者
Type type = typeof(long?);
给定“类型”,我怎样才能得到字符串“long”?背部?
你无法得到它是用什么写的。它只是一种语言速记。
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>)
你试过这个吗
Type type = typeof(long?);
Console.WriteLine(type.FullName);
但是你不会得到字符串 Long 因为每个原始类型都有别名。并且这些别名不会出现在类型系统上。
您应该为此语句获取 System.Nullable`1[System.Int64]。您必须自定义代码以获得正确的输出字符串
您可以使用 Type 的 Name 属性,但这不会返回“long?”。long 是 System.Int64 类型的语言语法糖。
您想询问类型的泛型参数,例如:
typeof(long?).GetGenericArguments().First().Name
但是,这将返回系统类型名称,而不是 c# 名称。
即,Int64
不long
这是不可能的。
Type type = typeof(long?);
只是与ValueType
.
System.ValueType
源自System.Object
,而不是System.Type
。
long?
只是一种奇特的写作方式,System.Nullable<long>
因此它的 type is not long?
,如果你想得到它是哪种类型,那么你必须自己解析它。
如果您想从类型中获取System.Nullable<T>
类型,T
则此代码将起作用:
Type t = typeof(long?);
t = t.FullName.StartsWith("System.Nullable") ? t.GenericTypeArguments[0] : t;
// t == typeof(long);