C# 如何使用泛型访问属性
我有两个不同对象的列表,即C# 如何使用泛型访问属性,c#,asp.net,.net,C#,Asp.net,.net,我有两个不同对象的列表,即 List<Customer> Customers; List<Retailer> Retailers; 列出客户; 列出零售商名单; 我有一个方法,如果我用适当的类型单独传递列表,一切都会正常工作 我想尝试泛型,看看我是否可以有一个方法来完成两个任务,即传入列表类型,它将遍历列表,获取记录并采取任何必要的操作 private T AddRecord<T>(List<T> ListofRecords)
List<Customer> Customers;
List<Retailer> Retailers;
列出客户;
列出零售商名单;
我有一个方法,如果我用适当的类型单独传递列表,一切都会正常工作
我想尝试泛型,看看我是否可以有一个方法来完成两个任务,即传入列表类型,它将遍历列表,获取记录并采取任何必要的操作
private T AddRecord<T>(List<T> ListofRecords)
{
foreach (T rec in ListofRecords.Records)
{
Object ob = GetRecord(rec.Id);
}
}
private T AddRecord(记录列表)
{
foreach(记录列表中的记录)
{
对象ob=GetRecord(rec.Id);
}
}
我遇到的问题是,rec
(foreach循环的变量)不知道它是什么类型,因此无法访问ID属性
我应该如何执行此操作?客户
和零售必须共享具有属性Id
的相同基类(或实现相同接口)。然后在您的函数中:
private T AddRecord<T>(List<T> ListofRecords) where T:YourBaseClass
{
foreach (T rec in ListofRecords)
{
Object ob = GetRecord(rec.Id);
}
}
private T AddRecord(记录列表),其中T:YourBaseClass
{
foreach(记录列表中的记录)
{
对象ob=GetRecord(rec.Id);
}
}
使用where T:
语句,您必须派生(或实现)基类(接口),以便编译器可以知道Id
属性的存在。客户和零售
必须共享具有Id
属性的相同基类(或实现相同接口)。然后在您的函数中:
private T AddRecord<T>(List<T> ListofRecords) where T:YourBaseClass
{
foreach (T rec in ListofRecords)
{
Object ob = GetRecord(rec.Id);
}
}
private T AddRecord(记录列表),其中T:YourBaseClass
{
foreach(记录列表中的记录)
{
对象ob=GetRecord(rec.Id);
}
}
使用where T:
语句,您必须派生(或实现)基类(接口),以便编译器能够意识到Id
属性的存在。如果您有一个共同的祖先,您可以使用where关键字-
interface IHasId
{
int Id { get; }
}
private T AddRecord<T>(List<T> listofRecords) where T: IHasId
{
foreach (var rec in listofRecords)
{
var theId = rec.Id;
}
...
}
接口IHasId
{
int Id{get;}
}
私有T AddRecord(记录列表),其中T:IHasId
{
foreach(记录列表中的var rec)
{
var theId=记录Id;
}
...
}
如果您有一个共同的祖先,可以使用where关键字-
interface IHasId
{
int Id { get; }
}
private T AddRecord<T>(List<T> listofRecords) where T: IHasId
{
foreach (var rec in listofRecords)
{
var theId = rec.Id;
}
...
}
接口IHasId
{
int Id{get;}
}
私有T AddRecord(记录列表),其中T:IHasId
{
foreach(记录列表中的var rec)
{
var theId=记录Id;
}
...
}
让两个类实现包含Id属性的相同接口,并将泛型类型约束到该接口。请参阅重复,但忽略反射答案。ListOfRecords.Records
应该是什么?您是否在某个地方有一个类具有Records
属性?方法是让两个类实现包含Id属性的相同接口,并将泛型类型约束到该接口。请参阅重复,但忽略反射答案。ListOfRecords.Records
应该是什么?您是否有一个类在某个地方具有记录
属性?好的。。。这是控制台应用程序中的正常方法,所以我不能使用它,因为它没有基类?@计算机基类(或接口)是关于客户和零售商的OK。。。这是控制台应用程序中的一个普通方法,所以我不能使用它,因为它没有基类?@计算机基类(或接口)是关于客户和零售商的