假设我有一定的价值,我想根据它可能具有的某些特征对它做些什么。
例如,假设值为string
,如果以L
开头,我想将其打印到屏幕上,如果长度小于20,则将其保存到文件中如果最后一个字符与第一个字符相同,则播放声音。
当然,一个选项是简单的if else if
结构:
if (value[0] == 'L')
....
else if (value.Length < 20)
....
else if (value[0] == value.Last())
....
然而,在很多条件下,这可能会很快变得难看。所以另一个选项是Dictionary
。但是我不确定如何使用Dictionary
来实现这一目标。
如何做到这一点?
答案 0 :(得分:1)
您可以构建一个字典,其中包含在满足条件时应执行的条件和操作。通常,如果您需要使用类型T
,则此字典将具有类型Dictionary<Predicate<T>, Action<T>>
。对于string
,它可以是:
var conditions = new Dictionary<Predicate<string>, Action<string>>
{
{s => s.StartsWith("L"), s => Console.WriteLine("Starts with L")},
{s => s.Length < 20, s => Console.WriteLine("Has fewer that 20 symbols")},
};
string input = "some input";
foreach (var condition in conditions)
{
if (condition.Key(input)) condition.Value(input);
}
事实上,你甚至不需要Dictionary
- 你可以使用List<Tuple<Predicate<string>, Action<string>>>
,或者甚至更好 - 引入一个包含谓词和动作的简单小类。