具有3个条件的C#中的三元算子

具有3个条件的C#中的三元算子,c#,C#,我有一个场景,其中我有3个条件,即 我能用C#中的一个三元运算符写出这个条件吗?。对于两种情况,我知道我们可以这样写: string.Compare(SaveAsOption, "Comparison document", StringComparison.OrdinalIgnoreCase) == 0 ? .pdf : .docx; 有人能帮我解决这个问题吗?你有两种情况,其中两种情况不清楚该怎么办。如果真的有3个选项,你可以使用三元运算符,开关,If…else If。对于三元: stri

我有一个场景,其中我有3个条件,即

我能用C#中的一个三元运算符写出这个条件吗?。对于两种情况,我知道我们可以这样写:

string.Compare(SaveAsOption, "Comparison document", StringComparison.OrdinalIgnoreCase) == 0 ? .pdf : .docx;

有人能帮我解决这个问题吗?

你有两种情况,其中两种情况不清楚该怎么办。如果真的有3个选项,你可以使用三元运算符,开关,If…else If。对于三元:

string docType = saveAs.ToLower() == "comparison document"
      ? ".pdf" 
      : saveAs.ToLower() == "comparison document2": 
      ? ".wdf"
      : saveAs.ToLower() == "word document with track changes" 
      ? ".docx"
      : null;
可能更好的方法是使用字典这样的数据结构:

Dictionary<string, string> options = new Dictionary<string, string>()
{
    {"comparison document", ".pdf"},
    {"comparison document2",".wdf"},
    {"word document with track changes",".docx"},
};
options.TryGetValue(saveAs.ToLower(), out string docType);
Console.WriteLine(docType);
字典选项=新建字典()
{
{“比较文件”,“.pdf”},
{“比较文档2”,“.wdf”},
{“跟踪更改的word文档”,“.docx”},
};
options.TryGetValue(saveAs.ToLower(),输出字符串docType);
Console.WriteLine(docType);

试试这个-嵌套三元:

string.Compare(saveAs, "pdf", StringComparison.OrdinalIgnoreCase) == 0 ? ".pdf" : (string.Compare(saveAs, "wdf", StringComparison.OrdinalIgnoreCase) == 0? ".wdf":".docx");
我能用C#中的一个三元运算符写出这个条件吗

答案是否定的


根据你的评论:

当我选择
SaveAsOption
作为
“比较文档”
时,我会得到两个选项,一个是
.pdf
,另一个是
.wdf

然后,您实际上想要使用
SaveAsOption
作为过滤器(因为它本身不足以决定选择哪个选项),并且需要第二次用户交互当筛选列表中有多个结果项时

List<FileOption> availableOptions = new List<FileOption>
{
    new FileOption{Type = ".pdf", SaveAsOption = "Comparison document"},
    new FileOption{Type = ".wdf", SaveAsOption = "Comparison document"},
    new FileOption{Type = ".docx", SaveAsOption = "Word document with Track Changes"},
};

string strInput = "Comparison document";

var result = availableOptions
    // Filter the list
    .Where(o => o.SaveAsOption == strInput)
    .Select(o => o.Type)
    .ToList();

if(result.Count > 1)
    Console.WriteLine("Please choose an option: {0}", string.Join(" or ", result));
else if(result.Count == 1)
    Console.WriteLine("You chose {0}", result[0]);
else
    Console.WriteLine("There is no option for your selection");
List availableOptions=新列表
{
新文件选项{Type=“.pdf”,SaveAsOption=“比较文档”},
新文件选项{Type=“.wdf”,SaveAsOption=“Comparison document”},
新文件选项{Type=“.docx”,SaveAsOption=“具有跟踪更改的Word文档”},
};
strInput=“比较文档”;
var结果=可用选项
//筛选列表
.Where(o=>o.SaveAsOption==strInput)
.选择(o=>o.Type)
.ToList();
如果(result.Count>1)
WriteLine(“请选择一个选项:{0}”,string.Join(“或”,result));
else if(result.Count==1)
WriteLine(“您选择了{0}”,结果[0]);
其他的
Console.WriteLine(“您没有选择的选项”);
这将显示:

  • 使用
    strInput=“比较文档”

    请选择一个选项:.pdf或.wdf

  • 使用
    strInput=“具有跟踪更改的Word文档”

    你选择了。docx

  • 其他:

    没有选项供您选择


在您发布的图像中,对于相同的条件(或我不理解您的表格),有两个不同的结果。我想如果您真的愿意,可以将它们叠加到任意多个位置<代码>条件?真:(条件2?真:假)@PavelAnikhouski图像不是代码为什么不切换?忘记你想用C#回答这个问题。先用英语回答。如果用户请求将文件另存为比较文档,文件应具有什么扩展名?请注意,“或.pdf或.wdf”不是有效答案。Hi@Cetin。谢谢你的回复!我有三个条件:当“SaveAsOption”是“Comparison document”时,类型应该是.pdf;下一次当“SaveAsOption”是“Comparison document”时,类型应该是.wdf;最后一次当“SaveAsOption”是“Word document with Track changes”,类型应该是.docx。我从一个excel中提供SaveA选项的值,因为选项值存在于我的AUT中。所以,我只是想看看处理这3种情况的最佳方法是什么?希望现在问题清楚了。请原谅我的任何困惑。@user12675659您的条件1和2是相同的,您到底想让我们如何决定您是需要
.pdf
还是
.wdf
保存选项
比较文档
时?嗨@Rafalon,是的,这是根据我的应用程序的条件,即当我选择SaveA选项作为比较文档时,我会得到两个选项,一个是.pdf,另一个是.wdf。谢谢然后,您不需要三元运算符,实际上需要使用
SaveAsOption
作为筛选器,并且当筛选出的结果项超过1个时,需要第二次用户交互list@user12675659,然后将这两个选项合并为一个。你有2个,而不是3个。这是一个幼稚的解决方案,很难扩展,很难维护。如果您想添加第四种格式,那么这个表达式将是一场噩梦。如果你需要更改比较,那么你必须在几个地方进行更改。@PeterCsala不,这不是原因。原因是这并不能回答问题。同样,考虑到OP的要求,可能没有答案。问题是关于管理3个条件,并且它服务于目的。我的答案不适用的其他要求是什么?谢谢Rafalon!这就是我一直在寻找的答案:)因为比较文档是一个选项,单击它我会得到一个要选择的元素列表。