泛型 C# 如何通过参数传递泛型对象的 属性
Generics C# How to pass a property of a generic object by parameter
我创建了这个方法,但它有一个问题我无法解决。
如何通过参数传递谓词?因为 "x.IsActive" 和 "source.Id" 和 "x.Id" 不同,通常我将通过参数传递的所有对象都具有 IsActive 和 Id 属性。
public static Differences<T> CheckChanges<T>(List<T> sourceTable, List<T> destinationTable)
{
var differences = new Differences<T>();
foreach (var sourceItem in sourceTable.Where(x => x.IsActive))
{
var destinationItem = destinationTable.FirstOrDefault(x => x.Id == sourceItem.Id);
}
return differences;
}
public static Differences<T> CheckChanges<T>(List<T> sourceTable,
List<T> destinationTable,
Func<T, bool> predicate,
Func<T, T, bool> pred2)
{
var differences = new Differences<Account>();
foreach (var sourceItem in sourceTable.Where(predicate))
{
var destinationItem = destinationTable.FirstOrDefault(x => pred2(x, sourceItem));
}
return differences;
}
如果您可以使所有对象都继承自一个公共接口,这可能会容易得多:
public interface IAccount
{
int Id { get; set; }
bool IsActive { get; set; }
}
你的方法签名看起来更像这样:
public static Differences<IAccount> CheckChanges(List<IAccount> sourceTable, List<IAccount> destinationTable)
我创建了这个方法,但它有一个问题我无法解决。
如何通过参数传递谓词?因为 "x.IsActive" 和 "source.Id" 和 "x.Id" 不同,通常我将通过参数传递的所有对象都具有 IsActive 和 Id 属性。
public static Differences<T> CheckChanges<T>(List<T> sourceTable, List<T> destinationTable)
{
var differences = new Differences<T>();
foreach (var sourceItem in sourceTable.Where(x => x.IsActive))
{
var destinationItem = destinationTable.FirstOrDefault(x => x.Id == sourceItem.Id);
}
return differences;
}
public static Differences<T> CheckChanges<T>(List<T> sourceTable,
List<T> destinationTable,
Func<T, bool> predicate,
Func<T, T, bool> pred2)
{
var differences = new Differences<Account>();
foreach (var sourceItem in sourceTable.Where(predicate))
{
var destinationItem = destinationTable.FirstOrDefault(x => pred2(x, sourceItem));
}
return differences;
}
如果您可以使所有对象都继承自一个公共接口,这可能会容易得多:
public interface IAccount
{
int Id { get; set; }
bool IsActive { get; set; }
}
你的方法签名看起来更像这样:
public static Differences<IAccount> CheckChanges(List<IAccount> sourceTable, List<IAccount> destinationTable)