从对象列表中访问数据会导致属性未定义

时间:2012-12-25 14:15:59

标签: c#

您好我已创建了一个对象列表,当我尝试访问这些属性时,我收到一条错误消息,指出该对象不包含该属性的定义。这是我的代码:

这是我创建对象列表的地方:

public List<object> returnProductData(SetProduct product)
    {
        List<object> productData = new List<object>();

        var type = product.GetType();
        var properties = type.GetProperties();

        foreach (var propertyInfo in properties)
        {
            if( propertyInfo.GetValue(product , null) != null && propertyInfo.Name != "ProductName" &&
                propertyInfo.Name != "Brand" && propertyInfo.Name != "ProductPrice" && propertyInfo.Name != "ProductImagePath" )
            {
                productData.Add(new { propertyName = propertyInfo.Name , propertyValue = propertyInfo.GetValue(product , null).ToString()}) ;
            }
        }

        return productData;
    } 

这是我尝试访问它的地方:

@foreach( var productData in ion)
            {
                <li>@productData.propertyName</li>
            }

当我尝试访问它时,它说该对象不包含propertyName的定义。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

您不应该返回List<object>您应该使用更具体的类型,例如List<ProductData>

如果该类不存在则写入。

答案 1 :(得分:1)

object没有propertyName属性。

如果描述的场景非常必要,如果您使用.net 4.0或更高版本,则可以使用dynamic,如下所示:

public List<dynamic> returnProductData(SetProduct product)
    {
        List<dynamic> productData = new List<dynamic>();

        var type = product.GetType();
        var properties = type.GetProperties();

        foreach (var propertyInfo in properties)
        {
            if( propertyInfo.GetValue(product , null) != null && propertyInfo.Name != "ProductName" &&
                propertyInfo.Name != "Brand" && propertyInfo.Name != "ProductPrice" && propertyInfo.Name != "ProductImagePath" )
            {
                productData.Add(new { propertyName = propertyInfo.Name , propertyValue = propertyInfo.GetValue(product , null).ToString()}) ;
            }
        }

        return productData;
    } 

用法:

@foreach( var productData in ion)
            {
                <li>@productData.propertyName</li>
            }