gpt4 book ai didi

c# - 使用泛型返回各种类型的List

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:43 25 4
gpt4 key购买 nike

试图了解泛型,我想创建一个返回各种类型记录的类。

所以我想要的是这样的:

public class Job
{
public JobType Type { get; set; }

public Job (JobType jobType)
{
Type = jobType;
}

public IList<T> GetRecords<T>()
{
IList<T> records = new IList<T>();

if (Type == JobType.Type1)
{
List<Type1Record> records = GetType1Records();
}
if (Type == JobType.Type2)
{
List<Type2Record> records = GetType2Records();
}
return records;
}
}

我想用类似的东西来调用它

var job = new Job(JobType.Type1);

var jobRecords = Job.GetRecords();

我认为上面的代码传达了意图,但我开始认为我正在以错误的方式处理这个问题,因为上面的代码根本不起作用。 IList 不能像这样转换为其他类型。

有谁知道我怎样才能实现这样的目标。

最佳答案

您似乎有点忽略了泛型的要点。如果您尝试在泛型方法中处理多个特定类型,那通常意味着您走错了方向。

您的问题的一个可能解决方案是让您的 Records从一些共享基类继承:

public class Job
{
public JobType Type { get; set; }

public Job (JobType jobType)
{
Type = jobType;
}

// Type1Record and Type2Record both inherit from RecordBase
public IEnumerable<RecordBase> GetRecords()
{
if (Type == JobType.Type1)
{
return GetType1Records();
}
if (Type == JobType.Type2)
{
return GetType2Records();
}

return null;
}
}

请注意,您需要返回一个 IEnumerable<T>在这里,不是 IList<T> ,因为使用 IList<T> 执行上述操作会破坏协方差。

看起来您最好在类级别使用泛型。

public abstract class Job<TRecord>
{
public abstract IList<TRecord> GetRecords();
}

public class Type1Job : Job<Type1Record>
{
public override IList<Type1Record> GetRecords()
{
// implementation
}
}

public class Type2Job : Job<Type2Record>
{
public override IList<Type2Record> GetRecords()
{
// implementation
}
}

关于c# - 使用泛型返回各种类型的List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33330253/

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