0

我的代码:

Type type = GetType(long?);

或者

Type type = typeof(long?);

给定“类型”,我怎样才能得到字符串“long”?背部?

4

5 回答 5

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>)

于 2012-09-27T13:09:09.480 回答
0

你试过这个吗

Type type = typeof(long?);
Console.WriteLine(type.FullName);

但是你不会得到字符串 Long 因为每个原始类型都有别名。并且这些别名不会出现在类型系统上。

您应该为此语句获取 System.Nullable`1[System.Int64]。您必须自定义代码以获得正确的输出字符串

于 2012-09-27T13:08:20.930 回答
0

您可以使用 Type 的 Name 属性,但这不会返回“long?”。long 是 System.Int64 类型的语言语法糖。

于 2012-09-27T13:10:32.890 回答
0

您想询问类型的泛型参数,例如:

typeof(long?).GetGenericArguments().First().Name

但是,这将返回系统类型名称,而不是 c# 名称。

即,Int64long

于 2012-09-27T13:10:35.187 回答
0

这是不可能的。

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);
于 2012-09-27T13:11:28.010 回答