C# 如果有,更好的方法
我很高兴有机会 下面我想计算行值大于2的次数 请注意,这些列是链接的,第一列->第三列,第二列->第四列。 有时我想计算tms=“abc”,有时如果它们与abc相反 对于这个案例有什么不同的方法吗C# 如果有,更好的方法,c#,if-statement,C#,If Statement,我很高兴有机会 下面我想计算行值大于2的次数 请注意,这些列是链接的,第一列->第三列,第二列->第四列。 有时我想计算tms=“abc”,有时如果它们与abc相反 对于这个案例有什么不同的方法吗 var_case = 1; var tms = "abc"; foreach (DataRow r in d.Rows) { gCount+= cases(r, _case, tms, true) ? 1 : 0; // gCount+= cases(r, _ca
var_case = 1;
var tms = "abc";
foreach (DataRow r in d.Rows)
{
gCount+= cases(r, _case, tms, true) ? 1 : 0;
// gCount+= cases(r, _case, tms) ? 1 : 0;
}
private bool cases(DataRow d, int _case, string tms = "", bool t = false)
{
var h = d.ItemArray[0].ToString();
bool res = false;
switch (_case)
{
case 1: res = (h == tms) ? ((!t) ? ((int)d.ItemArray[2] > 2) ? true : false : ((int)d.ItemArray[3] > 2) ? true : false) : ((!t) ? ((int)d.ItemArray[3] > 2) ? true : false: ((int)d.ItemArray[2] > 2) ? true : false); break;
default:
break;
}
return res;
}
您可以使用Linq对行进行计数,从而使行计数更加明确
var _case = 1;
var tms = "abc";
int gCount = table.Rows
.Cast<DataRow>()
.Count(r => cases(r, _case, tms, false));
这个问题可能更适合你,你确定每行只有一个“abc”吗?因为你的代码依赖于此。@AntonínLejsek,是的,100%确定。它可以关闭,我自己找到解决方案。谢谢大家。你们可以回答自己的问题。
private static bool cases(DataRow dataRow, int _case, string tms = "", bool invertedSearch = false)
{
switch (_case)
{
case 1:
string h = (string)dataRow.ItemArray[0];
int column = (h == tms) ^ invertedSearch ? 2 : 3;
return (int)dataRow.ItemArray[column] > 2;
default:
return false;
}
}