gpt4 book ai didi

c# - 通用类型列表

转载 作者:可可西里 更新时间:2023-11-01 07:51:31 27 4
gpt4 key购买 nike

我有一个通用类,我想为它创建一个列表。然后在运行时我得到项目的类型

public class Job<T>
{
public int ID { get; set; }
public Task<T> Task { get; set; }
public TimeSpan Interval { get; set; }
public bool Repeat { get; set; }
public DateTimeOffset NextExecutionTime { get; set; }

public Job<T> RunOnceAt(DateTimeOffset executionTime)
{
NextExecutionTime = executionTime;
Repeat = false;
return this;
}
}

我想要达到的目标

List<Job<T>> x = new List<Job<T>>();

public void Example()
{
//Adding a job
x.Add(new Job<string>());

//The i want to retreive a job from the list and get it's type at run time
}

最佳答案

如果您所有的工作都是同一类型(例如 Job<string>),您可以简单地创建一个该类型的列表:

List<Job<string>> x = new List<Job<string>>();
x.Add(new Job<string>());

但是,如果您想在同一个列表中混合使用不同类型的作业(例如 Job<string>Job<int>),则必须创建非通用基类或接口(interface):

public abstract class Job 
{
// add whatever common, non-generic members you need here
}

public class Job<T> : Job
{
// add generic members here
}

然后你可以做:

List<Job> x = new List<Job>();
x.Add(new Job<string>());

如果你想获得 Job 的类型在运行时你可以这样做:

Type jobType = x[0].GetType();                       // Job<string>
Type paramType = jobType .GetGenericArguments()[0]; // string

关于c# - 通用类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958875/

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