泛型 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)