Tag: switch statement

开关/模式匹配的想法

我最近一直在研究F#,尽pipe我不太可能马上跳过栅栏,但它确实突出了C#(或者库支持)可以让生活更轻松的一些领域。 特别是,我正在考虑F#的模式匹配function,它允许使用非常丰富的语法 – 比当前的开关/条件C#等价物更富有performance力。 我不会试图给出一个直接的例子(我的F#没有达到它),但总之它允许: 按types进行匹配(对被区分的联合体进行全覆盖检查)[注意,这也推断了绑定variables的types,赋予成员访问等] 按谓词匹配 上面的组合(可能还有一些我不知道的其他场景) 虽然C#最终可以借用一些丰富的内容,但在此期间,我一直在研究在运行时可以做些什么 – 例如,将一些对象敲在一起以便允许: var getRentPrice = new Switch<Vehicle, int>() .Case<Motorcycle>(bike => 100 + bike.Cylinders * 10) // "bike" here is typed as Motorcycle .Case<Bicycle>(30) // returns a constant .Case<Car>(car => car.EngineType == EngineType.Diesel, car => 220 + car.Doors * 20) .Case<Car>(car => car.EngineType == EngineType.Gasoline, car => […]

在JavaScript中切换语句多个案例

我需要JavaScript中的switch语句中的多个情况,例如: switch (varName) { case "afshin", "saeed", "larry": alert('Hey'); break; default: alert('Default case'); break; } 我怎样才能做到这一点? 如果在JavaScript中没有办法做这样的事情,我想知道另一个也遵循DRY概念的解决scheme。

在C#中切换语句贯穿始终?

开关语句贯穿是我爱的switch与if/else if构造的个人主要原因之一。 一个例子是为了在这里: static string NumberToWords(int number) { string[] numbers = new string[] { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; string[] tens = new string[] { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; string[] teens = new string[] { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", […]

如果与开关速度

由于编译器优化,switch语句通常比等效的if-else-if语句更快(如本文所描述的那样)。 这个优化如何实际工作? 有没有人有一个很好的解释?

在Java中,每种情况下使用switch语句的值范围?

在Java中,可以写一个switch语句,其中每个case包含多个值? 例如(尽pipe下面的代码显然不起作用): switch (num) { case 1 .. 5: System.out.println("testing case 1 to 5"); break; case 6 .. 10: System.out.println("testing case 6 to 10"); break; } 我认为这可以在Objective C中完成,Java中是否有类似的东西? 或者我应该只使用if , else if语句呢?

C#switch语句限制 – 为什么?

在编写switch语句时,在case语句中可以打开什么似乎有两个限制。 例如(是的,我知道,如果你正在做这种事情,这可能意味着你的面向对象 (OO)体系结构是不确定的 – 这只是一个人为的例子!), Type t = typeof(int); switch (t) { case typeof(int): Console.WriteLine("int!"); break; case typeof(string): Console.WriteLine("string!"); break; default: Console.WriteLine("unknown!"); break; } 在这里,switch()语句失败,'期望的整数types的值'和case语句失败'期望值为常数'。 为什么这些限制已经到位,以及根本的理由是什么? 我没有看到为什么switch语句只能屈从于静态分析的任何理由,以及为什么被打开的值必须是整数(即原语)。 什么是理由?

Java中if / else和switch语句的相对性能差异是什么?

担心我的Web应用程序的性能,我想知道哪个“if / else”或switch语句对性能更好?

为什么switch语句不能应用于string?

int main() { switch(std::string("raj")) //Compilation error – switch expression of type illegal { case"sda": } }

有没有比这更好的替代“打开types”?

看作是C#不能切换一个types(我收集的没有作为特殊情况添加,因为是一个关系意味着不止一个不同的情况可能适用),是否有更好的方式来模拟types切换比这个? void Foo(object o) { if (o is A) { ((A)o).Hop(); } else if (o is B) { ((B)o).Skip(); } else { throw new ArgumentException("Unexpected type: " + o.GetType()); } }

为什么我不能打开一个string?

为什么我不能打开一个String ? 这个function是否会被放到更高版本的Java中? 有人能解释为什么我不能这样做,因为在Java的switch语句的技术方式工作?