我有两个类
public class JobDataProvider
{
public List<Job> Get(int id){
List<Job> jobs = new List<Job>();
foreach(up_GetJobResult result in myDataContext.up_GetJob(id))
{
jobs.add(new Job(Id = result.Id, name = result.Name));
}
return jobs;
}
}//end class Job
public class PersondataProvider{
public List<Person> Get(int id){
List<Person> persons = new List<Persons>();
foreach(up_GetPersonsResult result in MyDataContext.up_GetPerson(id)){
persons.add(new Person(Id = result.Id, Name = result.Name, Surname = result.Surname));
}
return persons;
}
}end class Person
我想创建一个通用方法,像这样
public List<T> Get<T>(int id)
{
.. get data and return the list
}
最佳答案
您没有确切地提出问题,但我会看看是否能猜到您在问什么。您需要一个通用方法,您可以在其中指定要返回的类型和 ID,并让通用方法确定从哪里获取数据。
您可以创建一个字典,其中键是类型 (T),值是您想要返回的列表,或者可能是返回您想要的列表的接口(interface)实例(如果该列表是动态的并且您不这样做)不想将其存储在多个地方)。
这是一个您可以尝试的界面(显然您会想要添加更多错误处理)。当然,这个示例假设您不仅有一个显式接口(interface)(IDataProvider),还有一个隐式接口(interface)(IDataProvider.Get 必须返回一个正确类型的泛型列表)。
public interface IDataProvider
{
IEnumerable Get(int id);
}
public class JobDataProvider
: IDataProvider
{
public List<Job> Get(int id)
{
var jobs = new List<Job>();
// load jobs
return jobs;
}
IEnumerable IDataProvider.Get(int id)
{
return Get(id);
}
}
public class PersonDataProvider
: IDataProvider
{
public List<Person> Get(int id)
{
var people = new List<Person>();
// load people
return people;
}
IEnumerable IDataProvider.Get(int id)
{
return Get(id);
}
}
public class ItemDataProvider
{
private Dictionary<Type, IDataProvider> mProviders = new Dictionary<Type, IDataProvider>();
public void RegisterProvider(Type type, IDataProvider provider)
{
mProviders.Add(type, provider);
}
public List<T> Get<T>(int id)
{
var data = mProviders[typeof(T)].Get(id);
return (List<T>)data;
}
}
public class Job
{
}
public class Person
{
}
关于c# - 通用 C# 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2338064/