我想知道是否可以使用像"IN"这样的关键字来测试C#中if语句中的条件?
原始代码:
if (fAuth.ShowDialog(this.DialogParent) == DialogResult.Cancel
|| fAuth.ShowDialog(this.DialogParent) == DialogResult.Abort
|| fAuth.ShowDialog(this.DialogParent) == DialogResult.None
|| fAuth.ShowDialog(this.DialogParent) == DialogResult.No)
return;
Run Code Online (Sandbox Code Playgroud)
我问怎么做这样的事情:
if (fAuth.ShowDialog(this.DialogParent) IN (DialogResult.Cancel,DialogResult.Abort,DialogResult.None,DialogResult.No)
return;
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?
我认为你的问题的精确答案就像CodeMaster已经在if语句匹配多个值时指出的那样
话虽这么说,因为你正在检查a DialogResult,在这个特定情况下,我怀疑性能考虑因素发挥作用,我们更多地考虑代码可读性(因为你可能不会向用户弹出10,000个对话框).
最简单的解决方案是提高可读性的switch语句:
switch(fAuth.ShowDialog(this.DialogParent))
{
case DialogResult.Cancel:
case DialogResult.Abort:
case DialogResult.None:
case DialogResult.No:
return;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
问题在于,如果要在多个位置检查相同的内容,则可能需要重复代码.在这种情况下,我建议将其包装成这样的函数(根据您的喜好更改名称):
public class DialogEvaluator
{
public static bool IsResultNegative(DialogResult result)
{
switch(fAuth.ShowDialog(this.DialogParent))
{
case DialogResult.Cancel:
case DialogResult.Abort:
case DialogResult.None:
case DialogResult.No:
return true;
default:
return false;
}
}
}
//And use it like that:
if(DialogEvaluator.IsResultNegative(fAuth.ShowDialog(this.DialogParent))
{
return;
}
Run Code Online (Sandbox Code Playgroud)
如果你有一堆不同需求的不同情况,那么我会再次回到通用In方法并将可能的结果包装在命名良好的Lists中:
public static class DialogEvaluator
{
public static bool In<T>(this T obj, IEnumerable<T> args)
{
return args.Contains(obj);
}
static DialogEvaluator
{
NegativeResult = new List<DialogResult>() { DialogResult.Cancel, DialogResult.Abort, DialogResult.None, DialogResult.No };
SpecificNegativeResult = new List<DialogResult>() { DialogResult.Cancel, DialogResult.Abort, DialogResult.No };
}
public static List<DialogResult> NegativeResult {get; private set;}
public static List<DialogResult> SpecificNegativeResult {get; private set;}
}
//And use it like that:
if (fAuth.ShowDialog(this.DialogParent)
.In(DialogEvaluator.NegativeResult)
{
return;
}
//Or
if (fAuth.ShowDialog(this.DialogParent)
.In(DialogEvaluator.SpecificNegativeResult)
{
return;
}
Run Code Online (Sandbox Code Playgroud)
这取决于您的具体情况,您必须平衡可读性,可维护性和简洁性.
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |