gpt4 book ai didi

c# - 将项目添加到列表 T 通用方法

转载 作者:行者123 更新时间:2023-12-03 19:44:56 25 4
gpt4 key购买 nike

我什至不确定这是否可能,但这里的问题是我试图将项目添加到 List<T>如下

public static SelectList  ToSelectList<T>(List<T> addlist) where T : new ()
{
addlist.Insert(0, new T { Id = -1, Name = "SELECT" });
var list = new SelectList(addlist, "Id", "Name");
return list;
}

new T { Id = -1, Name = "SELECT" }抛出错误是否可以将项目添加到 List<T>

最佳答案

问题是,通过通用约束,您已将 T 声明为具有默认构造函数的任何对象。

编译器在编译时执行类型检查,T 不一定具有属性 IdName

解决方案是

  • 创建一个具有 IdName 的接口(interface),
  • 修改每个兼容类,使其实现此接口(interface)。
  • 向您的函数添加另一个通用约束,要求类型参数实现此接口(interface)。

编译示例:

public interface IEntity
{
int Id {get; set; }
string Name {get; set; }
}

class Widget : IEntity
{
public int Id {get; set; }
public string Name {get; set; }

public string SomeOtherProperty { get; set; }
}

public static SelectList ToSelectList<T>(List<T> addlist) where T : IEntity, new ()
{
addlist.Insert(0, new T { Id = -1, Name = "SELECT" });
var list = new SelectList(addlist, "Id", "Name");
return list;

}

// In your code
List<Widget> widgetList = new List<Widget>();
ToSelectList(widgetList);

关于c# - 将项目添加到列表 T 通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45451876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com