Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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构建表#_C#_Html_Html Table_Contains_Stringbuilder - Fatal编程技术网

C# 从字符串C构建表#

C# 从字符串C构建表#,c#,html,html-table,contains,stringbuilder,C#,Html,Html Table,Contains,Stringbuilder,好的,我有一个表,它是由一个字符串构建的,看起来像这样:13467 1= monday 2= tuesday ... 7= sunday so 13467 = mon,wed,thurs,sat,sun 我现有的代码手动检查字符串,如下所示 if (breakfastDays.Contains("1")) { sb.Append("<td class=\"active\">&nbsp;</td>"); mo++; } el

好的,我有一个
表,它是由一个字符串构建的,看起来像这样:
13467

1= monday
2= tuesday
...
7= sunday
so 13467 = mon,wed,thurs,sat,sun
我现有的代码手动检查字符串,如下所示

if (breakfastDays.Contains("1")) {
        sb.Append("<td class=\"active\">&nbsp;</td>");
        mo++;
    } else {
        sb.Append("<td>&nbsp;</td>");
    }

    if (breakfastDays.Contains("2")) {
        sb.Append("<td class=\"active\">&nbsp;</td>");
        tu++;
    } else {
        sb.Append("<td>&nbsp;</td>");
    }
if(breakfastDays.Contains(“1”)){
某人加上(“”);
mo++;
}否则{
某人加上(“”);
}
if(早餐日包含(“2”)){
某人加上(“”);
tu++;
}否则{
某人加上(“”);
}
class=“active”
部分只是告诉
css
选中该框

有没有一种更简单的方法来检查字符串


可能会有一些
for in
循环可能?

这将解决必须为表编写七个测试的问题:

for (int i = 1; i <= 7; i++)
{
    if (breakfastDays.Contains(i.ToString())
    {
        sb.Append("<td class=\"active\">&nbsp;</td>"));
    }
    else
    {
        sb.Append("<td>&nbsp;</td>");
    }
}

对于(int i=1;i是的,可以使用循环。唯一棘手的是增加变量,如果使用数组来增加变量会更容易

for (char c = '1'; c <= '7'; c++) {
  if (breakfastDays.Contains(c)) {
    sb.Append("<td class=\"active\">&nbsp;</td>");
    switch (c) {
      case '1': mo++; break;
      case '2': tu++; break;
      case '3': we++; break;
      case '4': th++; break;
      case '5': fr++; break;
      case '6': sa++; break;
      case '7': su++; break;
    }
  } else {
    sb.Append("<td>&nbsp;</td>");
  }
} 

for(char c='1';c我认为
mo
tu
是记录一周中天数的计数。更好的方法可能是使用数组:

public static void Main()
{
    int[] breakfastDays = new int[7];
    string days = "13467";
    var sb = new StringBuilder();

    for (int i = 0; i < 7; i++)
    {
        if (days.Contains((i + 1).ToString()))
        {
            sb.Append("<td class=\"active\">&nbsp;</td>");
            breakfastDays[i]++;
        } else {
            sb.Append("<td>&nbsp;</td>");
        }
    }

    Console.WriteLine(sb.ToString());
}
publicstaticvoidmain()
{
int[]早餐日=新int[7];
string days=“13467”;
var sb=新的StringBuilder();
对于(int i=0;i<7;i++)
{
if(days.Contains((i+1).ToString())
{
某人加上(“”);
早餐日[i]++;
}否则{
某人加上(“”);
}
}
Console.WriteLine(sb.ToString());
}

这样,您就不需要每天都使用单独的变量。

我首先想看看您是否可以去掉日积月累且容易出现问题的日积月累的单独变量。这样,您就可以将其简化为一个简单的循环,例如:

// Set up buckets for each day, with an initial count of 0
var dayMap = "1234567".ToDictionary(c => c, c => 0);

// For each key ("day")...
foreach (var day in dayMap.Keys.ToList())
{
    // Start writing the cell
    sb.Append("<td");
    // Check if input string contains that key
    if (breakfastDays.Contains(day)) 
    {
        // Increment the value in our day bucket
        dayMap[day]++;
        // Make the cell "active"
        sb.Append(" class=\"active\"");
    } 
    // Finish writing the cell
    sb.Append(">&nbsp;</td>");
}
//设置每天的存储桶,初始计数为0
var dayMap=“1234567”.ToDictionary(c=>c,c=>0);
//对于每个关键(“日”)。。。
foreach(dayMap.Keys.ToList()中的var day)
{
//开始写入单元格
某人加上(“”);
}

这里有很多东西很难理解,但如果您想知道是否有更好的方法来确定breakfastDays是包含“1”还是“5”,请选择breakfastDays.contains()差不多已经很好了。如果你说为什么你必须在这段代码中增加
mo
tu
,我们可能会处于一个更好的位置。你为什么不每天吃早餐呢?问题解决了!嗯。用字符串生成器构建html似乎很麻烦。你确定不想为此使用模板引擎吗?一个完美的例子对于
开关
over
if-else if-else
+1的使用,我必须执行
Contains(Convert.ToString(c)))
但是除了这个完美的答案之外。非常感谢!@DPB:Aha,接受字符的方法是
系统.Linq
命名空间中的一个扩展方法。如果你包括了这个,你可以直接使用字符。我在一个已经包含它的项目中测试了代码。@Guffa我刚刚实现了
系统。Linq
谢谢,工作起来就像一个魅力。