아래 코드에 따라 열거 형 내에 하나의 값을 가져 오려고합니다. 값이 두 번 나타납니다.열거 형 연결을 여기에서 반복하는 이유는 무엇입니까?
왜? 가장 좋은 것은 무엇입니까?
건배
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 값이 한 번만 나타나고 받아 들일 수있는 솔루션입니다. 왜 스레드가 루트에있는 것처럼 보이지만 열거 형을 강제하지 않고 두 번 나타나는지 잘 모르겠다.
'통화'는 '같음'을 구현합니까? – CodesInChaos
@CodeInChaos. 그것은 수행합니다 ... – Berryl
그러면 'Distinct()'호출을 할 수 있습니다. – CodesInChaos