我試圖根據下面的代碼在排序前獲取枚舉中的單個值。該值顯示兩次。爲什麼Enumerable可重複在這裏?
爲什麼?什麼是最好的解決方案?
乾杯,
Berryl
private static IEnumerable<Currency> _commonCurrencies;
public static IEnumerable<Currency> GetCommonCurrencies() {
return _commonCurrencies ??
(_commonCurrencies
= Currency.GetCachedCurrencies()
.Concat(new[] {Currency.Get(CurrencyIsoCode.KWD)})
.Where(x => !x.AlphabeticCode.StartsWith("X", StringComparison.InvariantCultureIgnoreCase))
.OrderBy(x => x.AlphabeticCode));
}
輸出
...
JPY
KWD
KWD // repeats?
...
EDIT
Currency.GetCurrencies()被撥打電話到一個線程安全高速緩存的實施方案,其封裝了一個字典並返回其值:
public ICollection<TValue> Values { get { return _inner.Values; } }
我沒有這種類型。將代碼更改爲'slap'ToArray()修復了問題,以便concat值只顯示一次,並且是可接受的解決方案。不知道爲什麼它顯示了兩次而沒有強制枚舉,雖然線程似乎在根..雖然線程似乎在根..
'貨幣'是否執行'Equals'? – CodesInChaos 2012-03-24 15:34:14
@CodeInChaos。它確實... – Berryl 2012-03-24 15:35:14
然後,你可以拍一個'Distinct()'調用。 – CodesInChaos 2012-03-24 15:35:58