我正在整理代码,以免产生讨厌的代码 他们在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和描述不存在或找不到, 该如何解决?
答案 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分别用于集合及其元素。