C# 抽象泛型方法与字符串和ienumerable对象问题
我想构建一组方法: 我有一个摘要:C# 抽象泛型方法与字符串和ienumerable对象问题,c#,oop,C#,Oop,我想构建一组方法: 我有一个摘要: public abstract Filter<T> Create(T type, string value); public abstract IEnumerable<Filter<T>> Create(T type, IEnumerable<object> values); 创建公共抽象过滤器(T类型,字符串值); 公共抽象IEnumerable创建(T类型,IEnumerable值); 和执行: publ
public abstract Filter<T> Create(T type, string value);
public abstract IEnumerable<Filter<T>> Create(T type, IEnumerable<object> values);
创建公共抽象过滤器(T类型,字符串值);
公共抽象IEnumerable创建(T类型,IEnumerable值);
和执行:
public override Filter<DiscountFilterType> Create(DiscountFilterType type, string value)
=> new DiscountFilter {Type = type, Value = string.IsNullOrWhiteSpace(value) ? null : value};
public override IEnumerable<Filter<DiscountFilterType>> Create(DiscountFilterType type, IEnumerable<object> values)
=> values.Select(value => this.Create(type, value?.ToString())).ToList();
public覆盖过滤器创建(折扣过滤器类型,字符串值)
=>新折扣过滤器{Type=Type,Value=string.IsNullOrWhiteSpace(Value)?null:Value};
公共重写IEnumerable创建(折扣FilterType,IEnumerable值)
=>values.Select(value=>this.Create(type,value?.ToString()).ToList();
看起来不错,但如果我想做这样的事情:
var type = DiscountFilterType.CampaignStatus;
var values = new List<CampaignStatus>{
CampaignStatus.Active,
CampaignStatus.Accepted,
CampaignStatus.Supplement};
// Act
var result = sut.Create(ype, values);
var type=DiscountFilterType.activationstatus;
var值=新列表{
活动状态。活动状态,
竞选状态。接受,
运动状况.补编};
//表演
var result=sut.Create(类型、值);
它试图向string方法发送一个数组
'CS1503参数2:无法从“System.Collections.Generic.List”转换为“string”
发生了什么事?
如果我想这样做:
public abstract Filter<T> Create(T type, object value);
public abstract IEnumerable<Filter<T>> Create(T type, IEnumerable<object> values);
创建公共抽象过滤器(T类型,对象值);
公共抽象IEnumerable创建(T类型,IEnumerable值);
怎么做
@编辑:
我希望有一个方法来创建过滤器,该过滤器采用:
1.一种类型和一个值
2.一个类型、多个值并返回多个筛选器
3.多个类型和多个值,并返回多个筛选器
类型总是enum的一部分,最后的值应该是string,但我不想在调用方法之前将值/数组强制转换为string 对于可枚举序列中的值类型,需要一个附加的通用参数(而不是使用
对象
)。请尝试以下抽象类型的定义:
public abstract Filter<TType, TValue> Create(TType type, TValue value);
public abstract IEnumerable<Filter<TType, TValue>> Create(TType type, IEnumerable<TValue> values);
创建公共抽象过滤器(TType类型,TValue值);
公共抽象IEnumerable创建(t类型,IEnumerable值);
然后,您可以将类型
TValue
的实例转换为方法体中的字符串(使用ToString
,如果这是您的约定所要求的,那么这一部分就有点超出了您的问题范围)。。除此之外,您的通用方法似乎有点奇怪。也许退一步,描述一下你打算做什么?请只讲英语你的列表
不能分配给IEnumerable
,因此编译器正在退回到T,string
重载。快速修复方法是将你的方法签名更改为Create(DiscountFilterType,IEnumerable value)
但TValue可以是字符串、自定义类、日期时间和int。