基本上我给用户一个选项来根据他们的大小过滤一组文件.
用户从下拉列表中选择比较类型(大于,小于,等于),然后输入大小(以字节为单位)进行比较.这是我到目前为止:
switch (cmboCompareType.SelectedText)
{
case "Greater Than":
fileOK = fi[i].Length > int.Parse(txtByteValue.Text);
break;
case "Less Than":
fileOK = fi[i].Length < int.Parse(txtByteValue.Text);
break;
case "Equal To":
fileOK = fi[i].Length == int.Parse(txtByteValue.Text);
break;
}
Run Code Online (Sandbox Code Playgroud)
是否有一种更优雅的方式来进行这种比较,而无需在C#中重复这么多代码?
Jon*_*eet 18
两种选择:
1)使用CompareTo和Sign:
int requiredSign;
switch (cmboCompareType.SelectedText)
{
case "Greater Than": requiredSign = 1; break;
case "Less Than": requiredSign = -1; break;
case "Equal To": requiredSign = 0; break;
default: throw new ArgumentException();
}
fileOK = Math.Sign(fi[i].Length.Compare(txtByteValue.Text)) == requiredSign;
Run Code Online (Sandbox Code Playgroud)
2)使用代表:
static readonly Func<int, int, bool> GreaterThan = (x, y) => x > y;
static readonly Func<int, int, bool> LessThan = (x, y) => x < y;
static readonly Func<int, int, bool> Equal = (x, y) => x == y;
...
Func<int, int, bool> comparison;
switch (cmboCompareType.SelectedText)
{
case "Greater Than": comparison = GreaterThan; break;
case "Less Than": comparison = LessThan; break;
case "Equal To": comparison = Equal; break;
default: throw new ArgumentException();
}
fileOK = comparison(fi[i].Length, int.Parse(txtByteValue.Text));
Run Code Online (Sandbox Code Playgroud)
jri*_*sta 10
int value = int.Parse(txtByteValue.Text);
int len = fi[i].Length;
switch (cmboCompareType.SelectedText)
{
case "Greater Than": fileOK = len > value; break;
case "Less Than": fileOK = len < value; break;
case "Equal To": fileOK = len == value; break;
}
Run Code Online (Sandbox Code Playgroud)
TADA!减少重复.,P
我不是案例陈述的粉丝,但同样的事情,只是另一种方式.
var fileOK = new Dictionary<string, Func<int, int, bool>>
(StringComparer.OrdinalIgnoreCase)
{
{ "Greater Than", (x, y) => x > y },
{ "Less Than", (x, y) => x < y },
{ "Equal To", (x, y) => x == y }
}[cmboCompareType.SelectedText](fi.Length, int.Parse(txtByteValue.Text));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4182 次 |
| 最近记录: |