如何在C#中高效将List<Thing>的属性转换为数组?
在C#中高效提取属性数组的方法
当然有啦!针对你要把List<Thing>里的Name和ID分别提取成string[]和int[]的需求,有两种高效的实现方式,完全适配Oracle数组绑定的场景:
1. 简洁首选:LINQ 方式
如果你追求代码的简洁性和可读性,LINQ的Select方法是最方便的选择,而且内部已经做了优化,大部分场景下性能完全够用。记得先引用System.Linq命名空间哦:
using System.Linq; // 提取Name数组 string[] thingNames = listOfThings.Select(t => t.Name).ToArray(); // 提取ID数组 int[] thingIDs = listOfThings.Select(t => t.ID).ToArray();
这种写法一行搞定,逻辑清晰,日常开发用它完全没问题。
2. 极致性能:手动循环遍历
如果你的listOfThings数据量特别大(比如百万级以上),想要追求极致性能,可以用手动循环的方式——只需要遍历List一次,同时填充两个数组,避免LINQ两次遍历带来的微小开销:
int itemCount = listOfThings.Count; string[] thingNames = new string[itemCount]; int[] thingIDs = new int[itemCount]; for (int i = 0; i < itemCount; i++) { Thing currentThing = listOfThings[i]; thingNames[i] = currentThing.Name; thingIDs[i] = currentThing.ID; }
这种方式直接操作数组索引,没有委托调用的额外消耗,在大数据量场景下性能优势会更明显。
小提示(适配Oracle数组绑定)
拿到这两个数组后,记得在设置Oracle参数时,把OracleParameter的ArrayBindCount属性设置为数组的长度,这样Oracle就能正确识别数组绑定啦。
内容的提问来源于stack exchange,提问作者SMerrill8
相关产品推荐
相关产品推荐

