通过具有可空类型的Ienumerable集合进行迭代

时间:2009-09-26 23:14:05

标签: c# .net asp.net-mvc nullable

我正在尝试迭代可以为空的类型组合的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进行比较时,它会失败。 有没有办法将可空类型解析为它的底层类型? ,例如解决日期时间?到了约会时间。

1 个答案:

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