如何传递通用对象列表?

时间:2015-11-01 22:37:37

标签: c# .net

我有一个包含以下内容的对象:

public class ExpenseFilters<T> {
    public ExpenseFilterType Type {get;set;}
    public T Value {get;set;}
}

在这种情况下,T可以是字符串,int,decimal。

我想创建一个接受ExpenseFilters通用列表的方法:

public void DoSomething(List<ExpenseFilters<T>> filterList) {}

这有可能吗?

编辑:道歉,因为我不够清楚。

我希望ExpenseFilters列表不会被限制为一种泛型类型。

例如,列表应包含

ExpenseFilters<int> 

以及

ExpenseFilters<string>

这可能吗?

1 个答案:

答案 0 :(得分:3)

使方法通用:

public void DoSomething<T>(List<ExpenseFilters<T>> filterList) { }

使用此方法时,类型参数T通常可以由编译器推断,因此您甚至不需要指定它:

List<ExpenseFilters<int>> list = new List<ExpenseFilters<int>>();
DoSomething(list);

修改

原来并不是你想做的事。

使用泛型无法做到这一点。您可能最接近的事情是创建由通用接口实现/继承的非泛型接口或基类。

public interface IExpenseFilters
{
    ExpenseFilterType Type { get; set; }
    object Value { get; set; }
}

public class ExpenseFilters<T> : IExpenseFilters
{
    public ExpenseFilterType Type { get; set; }
    public T Value { get; set; }

    object IExpenseFilters.Value
    {
        get { return Value; }
        set
        {
            if (!(value is T))
                throw new ArgumentException("Incorrect type", "value");
            Value = (T)value;
        }
    }
}