C#中数字拆分为字符串数组遇代码错误及split方法无效问题求助
Contains匹配的问题 让我们一步步拆解你的问题,搞定代码里的两个核心bug:数字拆分错误和Contains方法的类型不匹配问题。
问题1:错误的数字拆分逻辑
你原来写的var searchItems = searchTerm.ToCharArray().ToString();完全达不到拆分数字的效果——char[]调用ToString()只会返回字符串"System.Char[]",这根本不是你想要的单个数字字符集合。
而split()方法默认按空白字符拆分字符串,面对"12"这种连续数字字符串,它只会返回一个包含"12"的数组,自然拆不出单个数字。
正确的拆分方式:直接用ToCharArray()获取单个数字字符的数组,不用额外调用ToString():
var searchItems = searchTerm.ToCharArray();
比如"12"会被拆成['1', '2'],这才是你需要的单个数字字符集合。
问题2:Contains方法的类型不匹配错误
报错的核心原因是:temp是string[]类型(每个元素是字符串形式的数字,比如"1"),而searchItems里的元素是char类型(比如'1'),直接用temp.Contains(a)会因为类型不匹配触发错误。另外还要确保你已经引用了System.Linq命名空间(数组的Contains扩展方法来自Linq)。
修正判断逻辑:把char类型的元素转成string,再和temp里的字符串匹配:
if (searchItems.All(a => temp.Contains(a.ToString())))
另外,你构建temp数组的代码可以用Linq简化,让代码更简洁:
var temp = b.itemsUtilities.Select(c => c.item.ToString()).ToArray();
完整修正后的代码
// 确保顶部引用Linq命名空间 using System.Linq; // ... 你的其他代码 ... for (int i = 0; i < candid.Count; i++) { var searchTerm = candid[i].ToString(); // 正确拆分数字为单个字符数组 var searchItems = searchTerm.ToCharArray(); foreach (Tran b in transactions) { // 用Linq简化temp数组的构建 var temp = b.itemsUtilities.Select(c => c.item.ToString()).ToArray(); // 修正类型匹配问题,将char转为string后再判断Contains if (searchItems.All(a => temp.Contains(a.ToString()))) arraye[i] = arraye[i] + (b.transactionUtility); } }
额外优化思路
如果你希望temp和searchItems类型保持一致(都是char[]),也可以这样构建temp:
var temp = b.itemsUtilities.Select(c => c.item.ToString()[0]).ToArray();
这样后续判断可以直接用temp.Contains(a),不需要类型转换——前提是c.item都是单个数字。
内容的提问来源于stack exchange,提问作者Farzane MH

