更动态地处理if / else

时间:2018-11-06 18:58:12

标签: c#

从现在开始,如果您看到下面的代码,我需要如何更动态地处理此问题的建议,我正在硬编码findText [0]和findText [1],但是后来findText的值会增长,我不知道它将有多少个值,那么我将不知道有多少索引。

我知道使用foreach循环可以解决这种情况,但是问题是假设我有两个值“ abc,xyz” abc是第一个值,因此假设如果未在行中找到abc,它将转到其他部分,并且它将将行追加到stringbuilder,现在,当下一个值到达“ xyz”并且在行中找到它时,它将再次被追加。那么如何处理呢?为了处理此问题,我使用了findtext [0]和findtext [1]方法,但这在所有情况下均不起作用。

   foreach (string fText in findText.Split(','))
    {
    if (line.IndexOf(fText , StringComparison.OrdinalIgnoreCase) >= 0) //line.Contains(findText)
         {
              Regex regexText = new Regex(findText[0], RegexOptions.IgnoreCase);
              line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + findText[0] + " </span>");
              builder.Append(line);
         }
else
         {
              builder.Append(line);
              builder.Append("<br/>");
         }
    }

到目前为止使用的方法-

string[] findText = ("suspicious,suspcious").Split(',') ;
while ((line = sr.ReadLine()) != null)
{

   if (line.IndexOf(findText[0], StringComparison.OrdinalIgnoreCase) >= 0) //line.Contains(findText)
     {
          Regex regexText = new Regex(findText[0], RegexOptions.IgnoreCase);
          line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + findText[0] + " </span>");
          builder.Append(line);
     }
   if (line.IndexOf(findText[1], StringComparison.OrdinalIgnoreCase) >= 0) //line.Contains(findText)
     {
          Regex regexText = new Regex(findText[1], RegexOptions.IgnoreCase);
          line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + findText[1] + " </span>");
          builder.Append(line);
     }
   else
     {
          builder.Append(line);
          builder.Append("<br/>");
     }

}

2 个答案:

答案 0 :(得分:0)

由于条件块的内容似乎相同,因此可以使用LINQ查找第一个匹配项,如下所示:

 <Camera ref={ref => { this.camera = ref }} style={{ height:'75%',width:'90%',borderRadius:10,borderColor:'black',borderWidth:2 }} type={this.state.type}/>

var find = findText.FirstOrDefault(t => line.IndexOf(t, StringComparison.OrdinalIgnoreCase) >= 0); if (find != null) { Regex regexText = new Regex(find, RegexOptions.IgnoreCase); line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + find + " </span>"); builder.Append(line); } else { builder.Append(line); builder.Append("<br/>"); } 将产生初始匹配项或FirstOrDefault,让您选择要附加的行。

答案 1 :(得分:0)

while ((line = sr.ReadLine()) != null)
            {

                string[] finds = findText.Split(',');

                bool found = false;
                foreach (string find in finds)
                {
                    if (Regex.IsMatch(line, find, RegexOptions.IgnoreCase))
                    {
                        found = true;
                        Regex regexText = new Regex(find, RegexOptions.IgnoreCase);
                        line = regexText.Replace(line, "<span style =\"background-color: #FFFF00\">" + find + " </span>");
                        builder.Append(line);
                        break;
                    }
                }
                if (!found)
                {
                    builder.Append(line);
                    builder.Append("<br/>");
                }
            }