如何编写GetName()方法打印C#集合中包含的变量名称?
如何获取集合中变量的名称?
首先要明确:当你把变量添加到List<object>时,集合里只保存了变量的值,变量名称属于编译期的元数据,运行时已经丢失了,所以直接通过item.GetName()这种方式是无法实现的。你需要在存储变量时同时保存它的名称,下面是两种可行的方案:
方案1:使用字典存储键值对
用Dictionary<string, object>把变量名作为键,变量值作为值,结合nameof关键字可以避免硬编码字符串:
// 初始化字典,同时保存变量名和值 var collection = new Dictionary<string, object> { { nameof(b), b }, { nameof(sb), sb }, { nameof(shrt), shrt }, { nameof(ushrt), ushrt }, { nameof(i), i }, { nameof(ui), ui }, { nameof(lng), lng }, { nameof(ulng), ulng }, { nameof(f), f }, { nameof(d), d }, { nameof(dec), dec }, { nameof(c), c }, { nameof(str), str }, { nameof(b1), b1 }, { nameof(b2), b2 }, { nameof(b3), b3 }, { nameof(o1), o1 }, { nameof(o2), o2 }, { nameof(o3), o3 }, { nameof(o4), o4 }, { nameof(dt), dt } }; // 遍历输出 foreach (var kvp in collection) { Console.WriteLine("variable name : " + kvp.Key); Console.WriteLine("variable value: " + kvp.Value); Console.WriteLine("variable type : " + kvp.Value.GetType().Name); Console.WriteLine("***************************** "); }
nameof会在编译时解析成变量的字符串名称,即使后续变量重命名,IDE也会自动同步这个字符串,减少出错概率。
方案2:自定义类封装变量名和值
如果需要更灵活的扩展(比如后续添加更多属性),可以自定义一个类来保存变量的名称和值:
// 自定义类 public class NamedVariable { public string Name { get; set; } public object Value { get; set; } } // 初始化集合 var collection = new List<NamedVariable> { new NamedVariable { Name = nameof(b), Value = b }, new NamedVariable { Name = nameof(sb), Value = sb }, // 其他变量按同样方式添加 }; // 遍历输出 foreach (var item in collection) { Console.WriteLine("variable name : " + item.Name); Console.WriteLine("variable value: " + item.Value); Console.WriteLine("variable type : " + item.Value.GetType().Name); Console.WriteLine("***************************** "); }
这两种方案都能解决你的问题,核心思路就是在存储变量时主动保留名称信息,因为运行时无法从变量值反向获取原变量名。
内容的提问来源于stack exchange,提问作者Recep Kara
相关产品推荐
相关产品推荐

