Fieldinfo.FieldType.FullName没有给出datetime和double的数据类型

时间:2010-09-03 14:05:17

标签: c# reflection visual-studio-2005

我使用Fieldinfo.FieldType.FullName来获取字段数据类型。 对于一个字符串我得到System.String 但是对于一个Double我得到了

System.Nullable`1 [[System.Double,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]

类似于DateTime我得到的 System.Nullable`1 [[System.DateTime,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]

如果此特定字段是日期时间,我需要检查我的代码然后执行某些操作。 我怎样才能检查该字段是双字符串还是字符串或双字符等

提前致谢

2 个答案:

答案 0 :(得分:4)

JaredPar的回答是一个很好的解释。要获得解决方案,请尝试:

Type fieldType = fieldInfo.FieldType;
if (fieldType.IsGenericType && fieldType.GetGenericTypeDefinition() == typeof(Nullable<>))
    fieldType = fieldType.GetGenericArguments()[0];

现在你可以说:

if (fieldType == typeof(double))
    ...

等。这段代码基本上会“撤销”可空类型语义。

答案 1 :(得分:1)

此处的问题是相关字段实际上是double?DateTime?,而不是普通的double / DateTime。跟踪类型名称的?是全名Nullable<double>的简写,与double不同。

听起来你真的想要使用这个领域。有几种方法可以解决这个问题

  • 使字段类型实际为double而不是double?
  • 如果类型为doubledouble?,请执行操作。