从类型中获取ValueType

时间:2012-09-27 13:05:56

标签: c#

我的代码:

Type type = GetType(long?);

Type type = typeof(long?);

给出“类型”,我怎样才能得到字符串“long?”回来?

5 个答案:

答案 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);