有一份候选人名单。
candid: {12,14,16,19,25,64,78}
代码:
for (int i = 0; i < candid.Count; i++)
{
var searchTerm = candid[i].ToString();
var searchItems = searchTerm.ToCharArray().ToString();
foreach (Tran b in transactions)
{
string[] temp = new string[b.itemsUtilities.Count];
int j = 0;
foreach (ItemUtility c in b.itemsUtilities)
{
temp[j] = c.item.ToString();
j = j + 1;
}
if (searchItems.All(a => temp.Contains(a)))
arraye[i] = arraye[i] + (b.transactionUtility);
}
}
我收到以下错误:
&#39;串[]&#39;不包含&#39;包含&#39;的定义最好的 扩展方法重载&#39; Queryable.Contains(IQueryable, 炭)&#39;需要一个类型为“IQueryable&#39;
的接收器
如果代码更改为:var searchItems = searchTerm.ToCharArray().ToString();
收件人:var searchItems = searchTerm.split();
此错误已修复,但此split
命令不会分隔数字。
答案 0 :(得分:3)
我想你想把数字分成<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
<div class="card-deck">
<div class="card">
<div class="card-heading"> <img class="img-thumbnail" src="http://placehold.it/30x30" alt="IMG ALT TEXT">
<h4 class="card-title">Header</h4></div>
<div class="card-block">
<p class="card-text">More Text Here</p>
</div>
</div>
</div>
。
string[]
这将始终创建一个字符串var searchItems = searchTerm.ToCharArray().ToString();
,因此不是您想要的。
我想你想要:
"System.Char[]"
这应该可以修复编译器错误,因为string[] searchItems = searchTerm.Select(c => c.ToString()).ToArray();
现在将投射字符串而不是字符。
答案 1 :(得分:0)
更多的是一个简单的缺失包括,我认为你在思考
您的代码似乎简化为:
for (int i = 0; i < candid.Count; i++)
{
var searchTerm = candid[i].ToString();
foreach (Tran b in transactions)
{
var tmp = b.itemsUtilities.Select(x=> x.item.ToString()).ToList();
if( searchTerm.All(a=> tmp.Contains (a)){
arraye[i] = arraye[i] + (b.transactionUtility);
}
}
}
您可以再次简化,而不是根据if条件过滤每个过滤Trasanction。 如果你的坦率是11,则无需为1检查两次,这样一个简单的Distinct()将有助于此。