正如Preston在评论中提到的,
我正在尝试使用获取动态linq列的类型
var args = ((dynamic)linqColumn).PropertyType.GenericTypeArguments;
然后比较可能的类型名称:
if (args.Length > 0 && args[0].Name == "DateTime")
ProcessDateTimeType();
else if (args.Length > 0 && args[0].Name == "Double")
ProcessDoubleType();
这适用于带有.NET 4.0的Windows Vista,但不适用于带有NET 4.0的Windows Server 2003。抛出错误'System.Type' does not contain a definition for 'GenericTypeArguments'
。
我只需要用于可为null的类型的GenericTypeArguments。
知道吗?
备注
- 通过
var linqColumn = linqTableType.GetProperty("COLNAME");
获得linqColumn
linqTableType
通过'Type linqTableType = Type.GetType("MYNAMESPACE." + "TABLENAME");
获得- 代码在内部执行web服务
GenericTypeArguments
属性是在.NET 4.5中添加的。
4.5是对4.0的就地升级;即使您的目标是4.0,当您使用反射或dynamic
时,4.5 API仍然可以工作。
尝试将dynamic
代码限制为仅检索属性类型的部分;从那时起,您知道该值是Type
,因此可以使用早期绑定:
Type propertyType = ((dynamic)linqColumn).PropertyType;
// Visual Studio should now warn you if you try to use:
// var args = propertyType.GenericTypeArguments;
var args = propertyType.IsGenericType && !propertyType.IsGenericTypeDefinition
? propertyType.GetGenericArguments()
: Type.EmptyTypes;