如何在List<string>中存储键值对并通过Lambda按键查询?
解决方案:自定义字符串格式存储键值对,方便Lambda查询
嘿,我懂你的处境——必须用List<string>但又想高效地存储键值对、还能按键快速查询对吧?之前直接用Tuple.ToString()生成的字符串虽然能存,但解析起来既麻烦又容易出错(比如键/值里有逗号或括号的话就崩了)。下面给你两个实用的方案:
方案1:用自定义分隔符拼接键值对
这是最简单直接的方式,选一个不会出现在你的键或值中的字符作为分隔符(比如|、#或者::),存储和解析都很直观:
存储键值对
var list = new List<string>(); string key = "MyKey"; string value = "MyValue"; // 用分隔符拼接成字符串存入列表 list.Add($"{key}|{value}");
按键查询并解析
string targetKey = "MyKey"; // 用Lambda筛选匹配的键值对字符串 var matchedItem = list.FirstOrDefault(item => item.Split('|')[0] == targetKey ); if (matchedItem != null) { var parts = matchedItem.Split('|'); string foundKey = parts[0]; string foundValue = parts[1]; // 这里就可以使用找到的键和值啦 Console.WriteLine($"找到键:{foundKey},对应值:{foundValue}"); }
方案2:用JSON序列化存储(更健壮)
如果你的键或值可能包含特殊字符,或者需要更规范的格式,用JSON序列化是更稳妥的选择:
存储键值对
using System.Text.Json; var list = new List<string>(); var keyValuePair = new { Key = "MyKey", Value = "MyValue" }; // 序列化为JSON字符串存入列表 list.Add(JsonSerializer.Serialize(keyValuePair));
按键查询并解析
string targetKey = "MyKey"; // 反序列化后匹配键 var matchedJson = list.FirstOrDefault(json => { var kvp = JsonSerializer.Deserialize<dynamic>(json); return kvp.Key == targetKey; }); if (matchedJson != null) { // 反序列化为强类型元组或类 var kvp = JsonSerializer.Deserialize<(string Key, string Value)>(matchedJson); Console.WriteLine($"找到键:{kvp.Key},对应值:{kvp.Value}"); }
为什么不推荐用默认Tuple.ToString()?
默认的Tuple.ToString()输出格式是(MyKey, MyValue),如果你的键或值里包含逗号、括号这类字符,拆分字符串时会直接出错,而且解析逻辑会变得很复杂,远不如上面两种方案可靠。
内容的提问来源于stack exchange,提问作者doorman
相关产品推荐
相关产品推荐

