【发布时间】:2020-08-12 07:26:11
【问题描述】:
我想创建一个方法来创建一个通用对象列表。可能吗?像这样的:
public class Mtrl
{
public string Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public string Aa { get; set; }
}
public class Trdr
{
public string Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public string Address { get; set; }
public string AFM { get; set; }
public string Phone01 { get; set; }
public string Aa { get; set; }
}
然后用一个泛型类来创建我的列表:
public class GenericClass<T>
{
public List<T> GetData<T>()
{
List<T> myList = new List<T>();
if (typeof(T) == typeof(Trdr))
{
myList.Add(new Trdr());//Error 1: cannot convert from Trdr to 'T'
}
if (typeof(T) == typeof(Mtrl))//Error 2: cannot convert from Mtrl to 'T'
{
myList.Add(new Mtrl());
}
return myList;
}
}
我的错。我将尝试澄清更多。 Trdr、Mtrl 等类将具有许多不同的属性。 Getdata 方法将通过 json 从 Web 服务获取数据,我想创建一个对象列表并返回它 像这样的:
public List<T> GetData<T>()
{
List<T> myList = new List<T>();
if (typeof(T) == typeof(Trdr))
{
for (int i = 0; i < 100; i++)//fetch data from web api in json format
{
Trdr NewObj = new Trdr();
NewObj.Aa = "...";
NewObj.AFM = "...";
myList.Add(NewObj);
}
}
if (typeof(T) == typeof(Mtrl))
{
for (int i = 0; i < 100; i++)
{
Mtrl NewObj = new Mtrl();
NewObj.Aa = "...";
NewObj.Name = "name ...";
myList.Add(NewObj);
}
}
return myList;
}
}
【问题讨论】:
-
但是
List<T>已经是通用的了?你真的不需要这样做吗? -
虽然您可以只添加一个演员表,但有一个安全的机制可以做到这一点:添加
new约束public List<T> GetData<T>() where T : new() { /* code */ list.Add(new T()); }。但是我想知道你在这里想要做什么,你想达到什么目标? -
为什么不能为此创建 2 个方法?或者,您可以通过反射调用
List<T>.Add,尽管我认为这不应该是 the 解决方案。或者您可以在两个类中添加interface,并在方法签名中使用where T : IMyInterface。 -
一个只适用于两种特定类型的 generic 方法并不是真正的 generic,是吗?除非您的两个类都具有相同的基类或接口,否则您不应该在这里使用泛型。除此之外,您似乎只添加了一个元素,使 list 变得毫无意义。或者这只是演示?
-
public List<T> GetData<T>() Where T : new { return new List<T>(){new T()};?虽然这完全是多余的