如何在C#中通过Linq根据Guid值从数组中打印对应变量名
如何根据Guid数组中的值获取对应的变量名称?
好问题!你现在遇到的核心问题是:当你把Guid变量放进数组后,数组里只保存了Guid的值,完全丢失了变量名称的信息——因为变量名只是编译时的标识,运行时CLR并不会保留这些名称和值的绑定关系,所以直接从数组里的Guid值反推变量名是做不到的。
要解决这个问题,你需要手动建立Guid值和变量名称的映射关系,下面给你两种常用的实现方式:
方法1:使用Dictionary<Guid, string>存储映射
这是最直接的方式,把每个Guid和对应的名称存到字典里,之后通过Guid值快速查找对应的名称:
// 先定义你的Guid变量 Guid A = Guid.Parse("8D3C940C-C802-402D-9AF2-CBAB5BAC7381"); Guid B = Guid.Parse("4961CA21-7F36-44E7-9827-002263A32F73"); // 建立Guid与名称的映射字典 var guidNameMap = new Dictionary<Guid, string> { { A, "A" }, { B, "B" } }; // 目标Guid,也就是你要查找的那个值 var targetGuid = Guid.Parse("4961CA21-7F36-44E7-9827-002263A32F73"); // 查找并打印对应的名称 if (guidNameMap.TryGetValue(targetGuid, out var variableName)) { Console.WriteLine(variableName); // 输出:B } else { Console.WriteLine("未找到匹配的Guid"); }
方法2:使用元组列表(类型更安全)
如果你想让映射关系更直观,或者需要同时保留Guid值和名称的集合,可以用C#的元组类型来存储:
Guid A = Guid.Parse("8D3C940C-C802-402D-9AF2-CBAB5BAC7381"); Guid B = Guid.Parse("4961CA21-7F36-44E7-9827-002263A32F73"); // 用元组列表存储Guid和对应的名称 var guidWithNames = new List<(Guid Value, string VariableName)> { (A, "A"), (B, "B") }; var targetGuid = Guid.Parse("4961CA21-7F36-44E7-9827-002263A32F73"); var match = guidWithNames.FirstOrDefault(item => item.Value == targetGuid); if (!string.IsNullOrEmpty(match.VariableName)) { Console.WriteLine(match.VariableName); // 输出:B }
关键说明
不管用哪种方法,核心都是手动建立值与名称的关联——因为原数组ALL里的元素只是Guid值的副本,没有任何元数据能关联回原来的变量名"A"或"B"。这种映射是编译时必须显式定义的,运行时无法自动推导。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

