C# 如何检查是否选中了多个复选框

C# 如何检查是否选中了多个复选框,c#,wpf,checkbox,C#,Wpf,Checkbox,所以在我的程序中,我有三个支票盒(A、B和C)。我想将复选框的内容保存到文本文件中。我使用如下所示的if语句执行此操作: if (a.IsChecked == true) { res = a.Content.ToString() + " is checked"; } else if (b.IsChecked == true) { res = b.Content.ToString() + " is checked"; } else if (c.IsChecked == true)

所以在我的程序中,我有三个支票盒(A、B和C)。我想将复选框的内容保存到文本文件中。我使用如下所示的if语句执行此操作:

if (a.IsChecked == true)
{
    res = a.Content.ToString() + " is checked"; 
}
else if (b.IsChecked == true)
{
    res = b.Content.ToString() + " is checked";
}
else if (c.IsChecked == true)
{
    res = c.Content.ToString() + " is checked";
}
在这里,我将把上面的值保存到一个字符串中,然后在我的代码中保存到一个文本文件中

string test = res;
现在这对我有用了。所以我决定尝试检查是否选中了多个复选框。因此,添加了以下if语句:

else if ((a.IsChecked == true) && (b.IsChecked == true) && (c.IsChecked == true))
{
    res= a.Content.ToString() + " " + b.Content.ToString() + " " + c.Content.ToString()
}
但这不适用于我,因为最终res在文本文件中打印为a而不是bc。知道我做错了什么吗

另外请注意,我已经将代码顶部的res初始化为字符串:

string res;
当我运行我的代码时,我没有得到任何错误,所以我不确定我的错误在哪里。非常感谢您的帮助


非常感谢:)

您可以通过以下方式实现:

string res = "";
if (a.IsChecked)
{
    res += a.Content.ToString(); 
}
if (b.IsChecked)
{
    res += b.Content.ToString();
}
if (c.IsChecked)
{
    res += c.Content.ToString();
}
还是简单

string res = $"{(a.IsChecked?a.Content+" ":"")}{(b.IsChecked?b.Content+" ":"")}{(c.IsChecked?c.Content:"")}";

在这些情况下使用a是一种很好的做法。 另一方面,如果可以为每个复选框指定一行,则可以使用以下选项:

 StringBuilder sb = new StringBuilder();
 checkappend(ref sb, a);
 checkappend(ref sb, b);
 checkappend(ref sb, c);
 string res = sb.ToString();
其中

static void checkappend(ref StringBuilder sb, CheckBox ck)
{
    sb.Append(ck.Content.ToString());
    sb.Append(ck.IsChecked == true ?  "is checked." : " is NOT checked.");
    sb.Append(Environment.NewLine);
}
请注意,当列表中有许多复选框时,创建单独的类可以帮助您。你可以简单地使用

   foreach (var ck in listOfCheckBoxes)
       checkappend(ref ck, c);

这需要检查多个组合。只需从第一个代码段中删除
else
,即可逐个运行所有检查。您将只从上次成功检查中获得报告,若要获得多个报告,您必须以某种方式累积它们(添加到列表中,合并为多行字符串等)

下面是一个简单的单行程序(使用linq):


否则如果((a.IsChecked==true)和&(b.IsChecked==true)和&(c.IsChecked==true))如果任何条件失败,它的'res'将为null非常感谢您的回答,但您能向我解释什么是stringbuilder吗?:)但是,与
字符串类似的东西可以提高性能。请参见或。非常感谢!:)
var result = string.Join(" and ", new[] { a, b, c }.Where(o => o.IsChecked).Select(o => $"{o.Content} is checked"));