2017-04-13 75 views
0

我想建立的一套方法:摘要泛型方法和字符串和IEnumerable對象問題

我有這個抽象:

public abstract Filter<T> Create(T type, string value); 
public abstract IEnumerable<Filter<T>> Create(T type, IEnumerable<object> values); 

與實現

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(); 

它看起來不錯,但如果我想這樣做:

var type = DiscountFilterType.CampaignStatus; 
var values = new List<CampaignStatus>{ 
CampaignStatus.Active, 
CampaignStatus.Accepted, 
CampaignStatus.Supplement}; 
// Act 
var result = sut.Create(ype, values); 

它試圖將數組發送到字符串方法。

'CS1503 Argument 2: cannot convert from 'System.Collections.Generic.List<CampaignStatus>' to 'string'

這是怎麼回事? 如果我想這樣做:

public abstract Filter<T> Create(T type, object value); 
    public abstract IEnumerable<Filter<T>> Create(T type, IEnumerable<object> values); 

怎麼樣?

@Edit: 我希望有方法來創建過濾器,其採用: 1.一種類型,以及一個值 2.一種類型的,多個值,並返回多個過濾器 3.多種類型和多個值,並返回多個過濾器

類型總是一些枚舉和值最後應該作爲字符串,但我不想在調用方法之前轉換值/數組ToString。

+0

@DavidG說過的話。最重要的是,你的通用方法似乎有點奇特。也許退後一步,描述你打算做什麼? – decPL

+0

僅英文請 – DavidG

+1

http://stackoverflow.com/questions/2873480/generic-listt-as-ienumerableobject – CodeCaster

回答

1

對於可枚舉序列中的值類型,您需要額外的通用參數(而不是使用object)。請嘗試以下定義爲抽象類型:

public abstract Filter<TType, TValue> Create(TType type, TValue value); 
public abstract IEnumerable<Filter<TType, TValue>> Create(TType type, IEnumerable<TValue> values); 

然後你可以在類型TValue的情況下轉換爲方法體字符串(使用ToString如果這是你的約定需要什麼,這部分是有點外你問題的範圍)。

+0

但TValue可以是字符串,自定義類,日期時間和整型。 – Nerf