具有3个条件的C#中的三元算子
我有一个场景,其中我有3个条件,即 我能用C#中的一个三元运算符写出这个条件吗?。对于两种情况,我知道我们可以这样写:具有3个条件的C#中的三元算子,c#,C#,我有一个场景,其中我有3个条件,即 我能用C#中的一个三元运算符写出这个条件吗?。对于两种情况,我知道我们可以这样写: string.Compare(SaveAsOption, "Comparison document", StringComparison.OrdinalIgnoreCase) == 0 ? .pdf : .docx; 有人能帮我解决这个问题吗?你有两种情况,其中两种情况不清楚该怎么办。如果真的有3个选项,你可以使用三元运算符,开关,If…else If。对于三元: stri
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(“您没有选择的选项”);
这将显示:
- 使用
: 请选择一个选项:.pdf或.wdfstrInput=“比较文档”
- 使用
: 你选择了。docxstrInput=“具有跟踪更改的Word文档”
- 其他: 没有选项供您选择
.pdf
还是.wdf
当保存选项
是比较文档
时?嗨@Rafalon,是的,这是根据我的应用程序的条件,即当我选择SaveA选项作为比较文档时,我会得到两个选项,一个是.pdf,另一个是.wdf。谢谢然后,您不需要三元运算符,实际上需要使用SaveAsOption
作为筛选器,并且当筛选出的结果项超过1个时,需要第二次用户交互list@user12675659,然后将这两个选项合并为一个。你有2个,而不是3个。这是一个幼稚的解决方案,很难扩展,很难维护。如果您想添加第四种格式,那么这个表达式将是一场噩梦。如果你需要更改比较,那么你必须在几个地方进行更改。@PeterCsala不,这不是原因。原因是这并不能回答问题。同样,考虑到OP的要求,可能没有答案。问题是关于管理3个条件,并且它服务于目的。我的答案不适用的其他要求是什么?谢谢Rafalon!这就是我一直在寻找的答案:)因为比较文档是一个选项,单击它我会得到一个要选择的元素列表。