65.9K
CodeProject 正在变化。 阅读更多。
Home

创建适用于非整数类型的 Switch 函数

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.42/5 (8投票s)

2007 年 5 月 29 日

CPOL

1分钟阅读

viewsIcon

29562

downloadIcon

108

一个适用于非整型类型的 Switch 函数。

引言

当机器与人类通信时,通常需要 switch 语句。“switch 语句是一种控制语句,它通过将控制权传递到其主体内的其中一个 case 语句来处理多个选择和枚举”(MSDN)。这些 case 必须始终是常量且为整型。这意味着不能使用 doubles 和 floats,并且所有其他值必须是常量。

这段代码使用模板和委托来创建一个简单的类似 switch 的结构,它可以用于任何类型的 case。这些 case 在 SortedList<TKey, TValue> 中排序。

该代码使用匿名方法来执行 case 语句中的工作。

使用代码

在下面的示例代码中,为每个 case 显示一个消息框。

Switch<string> switcher = new Switch<string>(); //Create Object
switcher.AddCase("Hello", delegate(object[] args)//Add cases
    { MessageBox.Show("Hello"); });
switcher.AddCase("Goodbye", delegate(object[] args)
    { MessageBox.Show("Goodbye"); });
switcher.AddCase("Morning", delegate(object[] args)
    { MessageBox.Show("Morning"); });
switcher.AddCase("Evening", delegate(object[] args)
    { MessageBox.Show("Evening"); });
switcher.AddCase("Afternoon", delegate(object[] args)
    { MessageBox.Show("Afternoon"); });
switcher.AddDefault(delegate (object [] args)
    { MessageBox.Show("Default"); });//Add a default case.
switcher.DoSwitch(StringTextBox.Text); //Do Switch

我也为 doubles 创建了一个类。这个版本允许你指定值可以变化的容差。

DoubleSwitch switcher = new DoubleSwitch();//Create Object
switcher.AddCase(1, delegate(object[] args)//Add cases
    { MessageBox.Show("1"); });
switcher.AddCase(2, delegate(object[] args)
    { MessageBox.Show("2"); });
switcher.AddCase(2.5, delegate(object[] args)
    { MessageBox.Show("2.5"); });
switcher.AddCase(3, delegate(object[] args)
    { MessageBox.Show("3"); });
switcher.AddCase(1000, delegate(object[] args)
    { MessageBox.Show("1000"); });
switcher.AddDefault(delegate (object [] args)
    { MessageBox.Show("Default"); });//Add a default case
switcher.DoSwitch((double) DoubleTextBox.Value, 0.1d); //Do switch.

上面的代码允许 0.1 的容差。这意味着 2.59 将调用 2.5 case...

此外,可以创建特定的类,只需从基类派生,并实现“DoSwitch”函数即可。

尝试演示程序,以便更好地了解...

历史

这是第一个版本... 享受吧!

© . All rights reserved.