找不到静态方法List <t>属性

时间:2019-05-19 21:16:38

标签: c# list generics types

我正在整理代码,以免产生讨厌的代码 他们在UI(ASPX)中有所有下拉菜单的类, 我首先能够将其更改为linq,而不希望使用静态方法来传递列表

因此逻辑已从UI卸载 这就是我所拥有的

我将通过的所有列表下面都有这些属性, 刚使用

编写泛型方法
public static string Get_GenericDisplayData_Data(IList<T> ilist)
        {
            var list = (from prop in ilist
                select new

                    Display = prop.Display ?? "",
                    Description = prop.Description ?? "",
                    Id = prop.Id
                }).ToList();

            string json = new JavaScriptSerializer().Serialize(list);
            return json;
        }

编译器抛出错误,显示,显示,ID和描述不存在或找不到, 该如何解决?

1 个答案:

答案 0 :(得分:1)

正如评论中已经提到的那样,您需要添加一个通用类型约束,以告知编译器您的T类型完全有资格检索这些成员。

您可能有大量的类,这应该是使用泛型的原因,但至少它们必须具有定义Display,Description和Id成员的基类,然后将其用作约束基类会使其编译,除非并非您所有的类都具有这些成员,因此您的代码在逻辑上是错误的。

where T : TheBaseClass

没有太多建议的替代方法是使用动态。

from dynamic item in items
select new
{
    Display = item.Display ?? "",
    Description = item.Description ?? "",
    Id = item.Id
}

如果集合的元素类型不具有这些成员,则会抛出运行时异常。

尽管运行时绑定可能会导致性能降低。

顺便说一句,您的标识符命名是反模式,并且名称不代表变量的逻辑含义。将item和item分别用于集合及其元素。