Tag: switch statement

可与switch()一起使用的自定义结构/类型

我的一个项目有一个值类型/结构,表示video格式的自定义标识符字符串。 在这种情况下,它将包含一个内容类型字符串,但这可能会有所不同。 我已经使用了一个结构体,因此当它传递时它可以是强类型,并对初始字符串值执行一些健全性检查。 实际的字符串值可以是任何内容,由外部插件库提供,因此数字enum不适用。 public struct VideoFormat { private string contentType; public VideoFormat(string contentType) { this.contentType = contentType; } public string ContentType { get { return this.contentType; } } public override string ToString() { return this.contentType; } // various static methods for implicit conversion to/from strings, and comparisons } 由于存在一些非常常见的格式,我将这些格式暴露为具有默认值的静态只读字段。 public static readonly VideoFormat Unknown […]

用静态字段切换语句

假设我有一堆静态字段,我想在交换机中使用它们: public static string PID_1 = “12”; public static string PID_2 = “13”; public static string PID_3 = “14”; switch(pid) { case PID_1: //Do something 1 break; case PID_2: //Do something 2 break; case PID_3: //Do something 3 break; default: //Do something default break; } 由于C#不允许在开关内部使用非const语句。 我想了解这种设计的意图是什么。 我应该如何在c#中执行上述操作?

将变量设置为开关的结果

我是疯了还是有办法在C#中将变量设置为开关的结果? 就像是: var a = switch(b) { case c: d; case e: f; default: g; }; 有可能用其他语言吗? 我只是认为它是,但我没有得到任何编译。 提前致谢。

Enum.Parse()或Switch

要将字符串转换为枚举,以下哪种方式更好? 这段代码: colorEnum color = (colorEnum)Enum.Parse(typeof(colorEnum), “Green”); 或这个: string colorString = … colorEnum color; switch (colorString) { case “Green”: color = colorEnum.Green; break; case “Red”: color = colorEnum.Red; break; case “Orange”: color = colorEnum.Orange; break; …. }

C#语法和切换通配符

我想补充一点,每当它识别出“搜索X”时它就会搜索“X”,但我不知道如何将其添加到语法中,或者如何用我的开关来做这样的事情声明。 private void Form1_Load(object sender, EventArgs e) { Choices commands = new Choices(); commands.Add(new string[] { “hello”, “start chrome”, “search” }); GrammarBuilder gBuilder = new GrammarBuilder(); gBuilder.Append(commands); gBuilder.Culture = new System.Globalization.CultureInfo(“en-GB”); Grammar grammar = new Grammar(gBuilder); recEngine.LoadGrammarAsync(grammar); recEngine.SetInputToDefaultAudioDevice(); recEngine.SpeechRecognized += RecEngine_SpeechRecognized; } private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { switch (e.Result.Text) { case “hello”: synthesizer.SpeakAsync(“Hello! […]

索引切换语句,或等效? .net,C#

我想构建一个接受字符串参数的方法,以及一个我希望根据参数返回特定成员的对象。 所以,最简单的方法是构建一个switch语句: public GetMemberByName(MyObject myobj, string name) { switch(name){ case “PropOne”: return myobj.prop1; case “PropTwo”: return myobj.prop2; } } 这样可以正常工作,但我最终可能会找到一个相当大的列表…所以我很好奇是否有一种方法,无需编写一堆嵌套的if-else结构,以索引方式完成此操作,以便匹配字段通过索引找到而不是通过开关掉落直到找到匹配。 我考虑使用Dictionary来快速访问匹配的字符串(作为关键成员)但是因为我想访问传入对象的成员,所以我不确定这是怎么回事实现。 我特意试图避免reflection等,以便实现非常快速。 我可能会使用代码生成,所以解决方案不需要小/紧等。 我最初正在构建一个字典,但每个对象都在初始化它。 所以我开始将它移动到一个方法,可以根据键 – 一个switch语句查找值。 但由于我不再编入索引,我担心调用此方法的连续查找会很慢。 SO:我正在寻找一种方法来结合索引/散列查找(如字典使用)的性能与返回传入对象的特定属性。 我可能会将它放在用于它的每个类中的静态方法中。

C#开关/rest

看来我需要在使用C#的switch语句中的每个case块中使用break。 我可以在其他语言中看到这个原因,你可以通过下一个案例陈述。 案例块是否可能落入其他案例块? 非常感谢,非常感谢!

有没有办法让我的开关/案例落到C#的下一个案例中?

我正在使用switch / case语句来处理已部署应用程序的一些更新。 基本上,我想通过案例来执行从当前运行版本到最新版本的更新。 从Visual Studio对我大喊大叫,我了解到C#不允许进入下一个案例(正是我想要做的)。 从这个问题 ,我学会了如何做我想做的事。 但是,它仍然显然是一个错误。 我得到的是 switch (myCurrentVersion) { case null: case “”: case “0”: UpdateToV1(); goto case “1”; case “1”: UpdateToV2(); } 我在行case “1”:上收到以下错误: 错误1控件不能从一个案例标签(’case“1”:’)转到另一个案例标签 难道我做错了什么? 我怎么能强迫它掉下来?

构建语言切换器 – 仅限2种语言 – ASP.NET MVC

ASP.NET MVC应用程序接近完成,然后决定它需要一个语言切换器。 它只是两种语言:英语和日语。 他们应该能够在两者之间切换,但是如果没有选择,则应该选择浏览器的默认语言。 我想知道在这种情况下最好的解决方案是什么。 首先想到的是路线! 所以我改变路由在每条路线的末尾都有一个/{l} ,并且默认为l = “” 。 然后,在我的BaseController中(每个控制器都基于它),我检查路由中的l变量。 每个操作都会返回基于语言的视图。 我想简单地能够在URL的末尾破解/ ja-jp,它会以日语显示视图。 它似乎没有正确的路线。 然后,我的观点真的很糟糕,并且手工编码链接…我不能让帮助者首先输出正确的链接……并养成了手工编码的坏习惯。 所以,我必须再次重新编码每个链接 – 最后破解语言变量。 第二个想法 ……好吧,使用jQuery将语言变量附加到所有锚点的href。 在某些需要隐藏hrefs的情况下,这似乎过于笨拙和困难…… 所以…在这一点上,我决定尽一切可能。 在两种语言之间切换的最优雅方式是什么 – 不使用资源文件? 我只想让动作根据语言在2个视图之间进行选择。 我是否重写了我必须使用Html帮助程序的每个链接,然后让路由工作? 然后在BaseController中将语言设置为英语,如果它们没有值? 非常感谢任何建议,谢谢。

什么是失控开关声明的最佳替代方案?

我inheritance了一个包含一些巨大的switch语句块的项目,其中一些包含多达20个案例。 重写这些的好方法是什么?