在VB.Net中如何获取支持多变量类型的可编辑集合
满足需求的集合方案
根据你的需求,推荐两种适配的集合方案,对应你可能的两种使用场景:
场景1:集合存储不同类型的单个值,需按名称访问修改
适合你需求4中类似FirstString/SecondString作为元素名称的场景,推荐使用**Dictionary<string, object>**,完全满足所有需求:
- 支持多类型:值类型为
object,可直接存储string、int、byte等任意类型 - 增删元素:自带
Add()、Remove()方法,示例:var collection = new Dictionary<string, object>(); collection.Add("FirstString", "XY"); collection.Add("SecondInt", 123); collection.Remove("SecondInt"); - 搜索元素:可遍历或用
ContainsValue()判断,对应你的示例代码:foreach (var item in collection.Values) { if (collection.ContainsValue(xy)) // xy为要搜索的目标值 { // do something } } - 编辑元素:通过键名直接访问修改,对应你的示例逻辑:
注意:访问时需做类型转换,避免类型错误,也可以用if ((string)collection["FirstString"] == "XY") { collection["SecondString"] = "AB"; }TryGetValue()安全访问。
场景2:集合存储带多属性的自定义对象,需修改对象属性
如果你的需求4是指集合中的元素本身包含多个不同类型的属性,推荐自定义类+List<自定义类>,结合LINQ实现搜索:
- 定义包含所需属性的类:
public class MyElement { public string FirstString { get; set; } public string SecondString { get; set; } public int IntValue { get; set; } public byte ByteValue { get; set; } // 按需添加其他类型属性 } - 使用
List<MyElement>实现所有需求:- 增删元素:
var collection = new List<MyElement>(); collection.Add(new MyElement { FirstString = "XY", SecondString = "OldValue" }); collection.RemoveAt(0); // 按索引移除,或按对象移除 - 搜索元素:用LINQ实现(需引用
System.Linq):foreach (var elem in collection) { if (collection.Any(e => e.FirstString == "XY")) { // do something } } - 编辑元素:直接访问对象属性修改,对应你的示例逻辑:
foreach (var elem in collection) { if (elem.FirstString == "XY") { elem.SecondString = "AB"; } } // 或按索引直接修改 if (collection[0].FirstString == "XY") { collection[0].SecondString = "AB"; }
- 增删元素:
为什么之前的尝试没满足需求?
List(Of T):如果用List(Of Object)可以存多类型,但无法按名称访问元素;如果用强类型泛型,只能存单一类型,不符合需求1。Hashtable:非泛型集合,类型不安全,需频繁装箱拆箱,不如Dictionary<string, object>易用。- 自定义类:如果仅定义类但没结合
List和LINQ,会缺少便捷的搜索、遍历能力。
内容的提问来源于stack exchange,提问作者user1377723
相关产品推荐
相关产品推荐

