Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果有,更好的方法_C#_If Statement - Fatal编程技术网

C# 如果有,更好的方法

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

我很高兴有机会 下面我想计算行值大于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, _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;
    }
}