如何将n个不同的通用参数传递给方法

时间:2015-03-23 09:19:18

标签: c# generics

目前我有以下方法,它将两个linq表达式作为参数并使用它们进行一些处理。

public RecordConfiguration<TStage, TKey> EnsureUnique<TProperty1, TProperty2>(Expression<Func<TStage, TProperty1>> propertyAccessor1, Expression<Func<TStage, TProperty2>> propertyAccessor2)
    {
        var columnSet = new ColumnSet<TStage>();
        columnSet.AddAt(0, propertyAccessor1);
        columnSet.AddAt(1, propertyAccessor2);
        Expression<Func<IEntitySetCollection, short, IValidator>> uniquenessValidatorCreator = (entitySetCollection, stagedEntitySetId) =>
            new UniquenessValidator<TStage, TKey>(entitySetCollection,stagedEntitySetId, columnSet);
        RecordValidatorCreators.Add(uniquenessValidatorCreator);
        return this;
    }

相反,只限制两个参数,我可以传递n个不同类型的参数,如上面两个吗?

1 个答案:

答案 0 :(得分:3)

您可以使用参数运算符

public RecordConfiguration<TStage, TKey> EnsureUnique>(params Expression<Func<TStage, object>>[] propertyAccessors)
{
    // ...
    properyAccessors.Select((val,index)=>new{ val,index})
                    .ForEach(i =>columnSet.AddAt(i.index, i.val));
    // ...
}