我正在尝试迭代可以为空的类型组合的Enumerable集合 但是我想比较可空类型和内在类型,如字符串或小数。 这是一个片段
<% foreach (PropertyInfo prop in this.Columns)
{ %>
<td>
<% var typeCode = Type.GetTypeCode(prop.PropertyType); %>
<%-- String Columns --%>
<% if (typeCode == TypeCode.String)
{ %> ....
prop.PropertyType的类型是'datetime?',但是var typeCode是'object'。所以当我将typeCode与TypeCode.String进行比较时,它会失败。 有没有办法将可空类型解析为它的底层类型? ,例如解决日期时间?到了约会时间。
答案 0 :(得分:4)
您可以使用静态Nullable.GetUndlerlyingType
方法。为了便于使用,我可能会将它包装在扩展方法中:
public static Type GetUnderlyingType(this Type source)
{
if (source.IsGenericType
&& (source.GetGenericTypeDefinition() == typeof(Nullable<>)))
{
// source is a Nullable type so return its underlying type
return Nullable.GetUnderlyingType(source);
}
// source isn't a Nullable type so just return the original type
return source;
}
您需要将示例代码更改为以下内容:
<% var typeCode = Type.GetTypeCode(prop.PropertyType.GetUnderlyingType()); %>