Tag: switch statement

switch语句中的奇数变量范围

这个问题让我想起了一个关于开关的一个未解决的问题: int personType = 1; switch (personType) { case 1: Employee emp = new Employee(); emp.ExperienceInfo(); break; case 2: Employee emp = new Employee(); //Error: A local variable named ’emp’ is already defined in this scope emp.ManagementInfo(); break; case 3: Student st = new Student(); st.EducationInfo(); break; default: MessageBox.Show(“Not valid …”); } 为什么emp在’案例2’中被认可? 在C ++中(如果我没有错)我们可以一起使用多个案例,但在C#中这是不可能的,我们应该使用break关闭case […]

在switch语句中切换语句?

我必须评估许多条件。 在我的情况下,我必须做这样的事情: switch(id) { case 5: // switch some other cases here case 6: // set some value … } 在案例5中使用另一个开关是一种好习惯吗? 如果没有,有什么更好的? 在那里有if语句吗?

结合返回和切换

如何组合return和switch case语句? 我想要类似的东西 return switch(a) { case 1:”lalala” case 2:”blalbla” case 3:”lolollo” default:”default” }; 我知道这个解决方案 switch(a) { case 1: return “lalala”; case 2: return “blalbla”; case 3: return “lolollo”; default: return “default”; } 但我想只使用return运算符。

从架构上讲,我应该如何用更易于管理的东西替换一个非常大的switch语句?

编辑1:忘记添加嵌套属性曲线球。 更新:我选择了@ mtazva的答案,因为这是我特定案例的首选解决方案。 回想起来,我用一个非常具体的例子问了一个普遍的问题,我认为这最终会使每个人(或者也许只是我)混淆这个问题究竟是什么。 我相信一般性问题也得到了回答(参见战略模式答案和链接)。 感谢大家! 很大的开关语句显然有气味 ,我已经看到了一些关于如何使用映射到函数的字典来实现这一点的链接。 但我想知道是否有更好的(或更聪明的方法)来做到这一点? 在某种程度上,这是一个我总是在脑后滚动的问题,但从来没有真正有一个很好的解决方案。 这个问题源于我之前提到的另一个问题: 如何使用C#在.Net中的类型对象列表中选择对象属性的所有值 这是我正在使用的示例类(来自外部源): public class NestedGameInfoObject { public string NestedName { get; set; } public int NestedIntValue { get; set; } public decimal NestedDecimalValue { get; set; } } public class GameInfo { public int UserId { get; set; } public int MatchesWon { get; […]

应该何时尝试消除switch语句?

我在我正在处理的代码库中遇到了一个switch语句,我正在试图弄清楚如何用更好的东西替换它,因为switch语句被认为是代码味道 。 但是,通过阅读有关替换 switch 语句的 stackoverflow上的几篇文章,我似乎无法想到替换此特定switch语句的有效方法。 它让我想知道这个特定的switch语句是否正常,以及是否有特殊情况认为switch语句是合适的。 在我的情况下,我正在努力的代码(自然略微混淆)是这样的: private MyType DoSomething(IDataRecord reader) { var p = new MyType { Id = (int)reader[idIndex], Name = (string)reader[nameIndex] } switch ((string) reader[discountTypeIndex]) { case “A”: p.DiscountType = DiscountType.Discountable; break; case “B”: p.DiscountType = DiscountType.Loss; break; case “O”: p.DiscountType = DiscountType.Other; break; } return p; } 谁能建议一种消除这种转换的方法? 或者这是一个适当的开关? 如果是,那么switch语句还有其他适当的用途吗? […]

如何在类型安全的枚举模式上使用switch语句

我以不同的方式找到了一个关于实现枚举的好例子。 我认为这就是所谓的类型安全枚举模式 。 我开始使用它,但我意识到我不能在switch语句中使用它。 我的实现如下所示: public sealed class MyState { private readonly string m_Name; private readonly int m_Value; public static readonly MyState PASSED= new MyState(1, “OK”); public static readonly MyState FAILED= new MyState(2, “ERROR”); private MyState(int value, string name) { m_Name = name; m_Value = value; } public override string ToString() { return m_Name; } […]

“switch”语句评估是否是线程安全的?

请考虑以下示例代码: class MyClass { public long x; public void DoWork() { switch (x) { case 0xFF00000000L: // do whatever… break; case 0xFFL: // do whatever… break; default: //notify that something going wrong throw new Exception(); } } } 忘掉片段的无用性:我怀疑是关于switch语句的行为。 假设x字段只能有两个值: 0xFF00000000L或0xFFL 。 上面的开关不应该属于“默认”选项。 现在想象一个线程正在执行“x”等于0xFFL的开关,因此第一个条件将不匹配。 同时,另一个线程将“x”变量修改为0xFF00000000L。 我们知道64位操作不是primefaces操作,因此变量将首先将较低的dword置零,然后将较低的dword置零(反之亦然)。 如果在“x”为零时(即在新的分配期间)完成开关中的第二个条件,我们是否会陷入不受欢迎的“默认”情况?

C#在lambda表达式中切换

是否有可能在lambda表达式中进行切换? 如果没有,为什么? Resharper将其显示为错误。

切换elseif切换案例

我们如何切换下面的if -else语句来切换case语句..任何人都可以帮忙… if (Webcc1.Contains(licensePartID)) { dtExpiryDate = dtActivatedDate.AddYears(1); int isExpiry = DateTime.Compare(dtActivatedDate, dtExpiryDate); if (isExpiry >= 0) { setError(lblSystemErr, “This action cannot be performed. The subscription period of the license key has expired”); return; } } else if (Webcc3.Contains(licensePartID)) { dtExpiryDate = dtActivatedDate.AddYears(3); int isExpiry = DateTime.Compare(dtActivatedDate, dtExpiryDate); if (isExpiry >= 0) { setError(lblSystemErr, “This […]

c#阿尔法电话号码翻译

我有一个家庭作业,程序将接受任何类似于555-GET-FOOD格式的电话号码。 任务是将字母字母映射到数字并将数字转换为数字等效字母。 例如:A,B,C = 2; D,E,F = 3; 等等… 我们此时尚未涉及类或创建地图,因此这些不是可行的解决方案。 本章确实涵盖了枚举,所以我正在努力使用枚举类型来解决。 我有一个方法设置来validation数据(确保正确的#字符和连字符在正确的位置),这确实工作正常。 我有另一个方法设置来删除连字符,并使用ToUpper()方法,这也正常工作,所以foreach循环我已经使用这两个方法已经完成后的数字设置我们。 我还设置了一个方法,在转换发生后运行,以添加连字符,这也有效。 我已经尝试了几种方法来工作并让他们注意到他们可能成为我需要使用的机会,因为我尝试使用switch语句我现在只设置字母A,并计划如果我能够使其工作,请完成剩余的字母。 我认为我的问题是foreach循环使用char类型,并且交换机使用int。 在foreach循环中尝试代码时似乎是同样的问题,但我不知道如何修复所以任何建议都值得赞赏。 public enum AlphaNumber { A=2, B=2, C=2, D=3, E=3, F=3, G=4, H=4, I=4, J=5, K=5, L=5, M=6, N=6, O=6, P=7, Q=7, R=7, S=8, T=8, U=8, V=9, W=9, X=9, Y=9, Z=9 } private void UpdatePhone(AlphaNumber phone) { switch (phone) […]