我有一個看起來非常簡單的問題,但由于某種原因它不起作用,我一直無法找到解決方案。
我有一個字典,有一個數字鍵和一個類物件作為值。我想輸入一個鍵并回傳字典的所有值,但指定鍵的值除外。
下面的示例不回傳任何內容。
static readonly Dictionary<int, LinkDto> _chips = new Dictionary<int, LinkDto>()
{
{ 100, new LinkDto("url1", "text1") },
{ 200, new LinkDto("url2", "text2") },
{ 500, new LinkDto("url3", "text3") },
{ 1000, new LinkDto("url4", "text4") },
{ 1500, new LinkDto("url5", "text5") },
};
這是查詢字典的方法:
public void Build(int key)
{
Build(_chips
.Where(x => !_chips.ContainsKey(key))
.Select(x => x.Value).ToList());
}
這是電話:
Build(1500);
我希望它回傳 100、200、500 和 1000 的值。
uj5u.com熱心網友回復:
編碼
_chips.Where(x => !_chips.ContainsKey(key))
如果確實包含鍵等于 的條目,則將不回傳任何條目。如果不包含鍵等于 的條目
,它將回傳所有條目。_chips_chips key_chipskey
考慮到您的示例字典(包含鍵100、200、500、1000、1500)和示例key值1500,過濾操作實際上是:
_chips.Where(x => !_chips.ContainsKey(1500))
!_chips.ContainsKey(1500)對于任何字典條目 ( ),該部分永遠不會更改x,因此在對所有條目執行過濾時將具有相同的值;無論條目的Key價值如何。
我很確定您想將.Where()運算式替換為:
.Where(x => x.Key != key)
過濾掉Key等于提供key值的條目。
uj5u.com熱心網友回復:
public static IEnumerable<TValue> GetOtherValues<TKey,TValue>( this IReadOnlyDictionary<TKey,TValue> dict, TKey notThisKey )
where TKey : notnull, IEquatable<TKey>
{
if( dict is null ) throw new ArgumentNullException(nameof(dict));
return dict.Where( kvp => !notThisKey.Equals( kvp.Key ) ).Select( kvp => kvp.Value );
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/494211.html
上一篇:如何根據條件僅回傳特定物件串列
