我试图根据下面的代码在排序前获取枚举中的单个值。该值显示两次。为什么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