我有一个包含以下内容的对象:
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>
这可能吗?
答案 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;
}
}
}