Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 抽象泛型方法与字符串和ienumerable对象问题_C#_Oop - Fatal编程技术网

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。