where T : struct
Run Code Online (Sandbox Code Playgroud)
我们C#开发人员都知道C#的基础知识.我的意思是声明,条件,循环,运算符等.
我们中的一些人甚至掌握了Generics,匿名类型,lambdas,LINQ等......
但是C#粉丝,瘾君子,专家几乎都不知道C#最隐藏的功能或技巧是什么?
yield由迈克尔·葡萄汁var由迈克尔·葡萄汁using()kokos的声明readonly由kokosas由迈克·斯通as/ is由埃德Swangrenas/ is(改进)由Rocketpantsdefault由deathofratsglobal::通过pzycomanusing()由块AlexCusevolatile作者:JakubŠturcextern alias作者:JakubŠturc在C#中使用switch语句与使用语句的好处/缺点是什么?if/else我无法想象除了你的代码外观之外还有其他重大差异.
是否有任何理由导致生成的IL或相关的运行时性能完全不同?
为什么在C#switch语句中,对于在多种情况下使用的变量,您只在第一种情况下声明它?
例如,以下引发错误"已在此范围中定义名为'variable'的局部变量".
switch (Type)
{
case Type.A:
string variable = "x";
break;
case Type.B:
string variable = "y";
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,根据逻辑,如果类型为,则不应该触发初始声明Type.B.switch语句中的所有变量是否都存在于单个作用域中,是否在处理任何逻辑之前创建/分配它们?
只要我记得我已经避免使用switch语句.实际上,我不记得它曾经进入我的意识作为一种可能的做事方式,因为它早在我的头脑中钻了它只不过是转换语句中的一个错误.然而,今天我遇到了一些在设计中使用它的代码,这让我立刻想知道社区中的每个人都认为有关switch语句的漏洞.
这是编程语言应该明确不允许的东西(比如C#,但它提供了一种解决方法),还是任何语言的功能都足以留给程序员手中?
编辑: 我没有具体到达我的意思.我经常使用这种类型:
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something
break;
case 2:
case 3:
case 4:
// Do something
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,我很担心这样的事情.
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something but fall through to the other cases
// after doing it.
case 2:
case 3:
case 4:
// Do something else.
break;
}
Run Code Online (Sandbox Code Playgroud)
这种方式只要大小写为0,1就会在switch语句中执行所有操作.我已经通过设计看到了这一点,我只是不知道我是否同意以这种方式使用switch语句.我认为第一个代码示例非常有用且安全.第二个似乎有点危险.
我无法弄清楚如何将开关与枚举结合使用.你能告诉我我做错了什么,以及如何解决它?我必须使用枚举来制作一个基本的计算器.
public enum Operator
{
PLUS, MINUS, MULTIPLY, DIVIDE
}
public double Calculate(int left, int right, Operator op)
{
int i = (int) op;
switch(i)
{
case 0:
{
return left + right;
}
case 1:
{
return left - right;
}
case 2:
{
return left * right;
}
case 3:
{
return left / right;
}
default:
{
return 0.0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
最终结果应该是这样的:
Console.WriteLine("The sum of 5 and 5 is " + Calculate(5, 5, PLUS))
Output: The …Run Code Online (Sandbox Code Playgroud) 如何为开关盒C#使用多个常量?从概念上讲,我正在寻找这样的东西:
switch(n)
{
case 1,2,3: //????
case 4:
default:
}
Run Code Online (Sandbox Code Playgroud) 我想知道是否有可能在C#中的switch语句中有条件地突破一个案例.以下面的例子为例.
MediaStream photoMediaStream = null;
switch (photoSize)
{
case PhotoSize.Normal:
if (imageWidth >= NormalWidth && imageWidth % NormalWidth == 0)
{
photoMediaStream = photoMedia.GetStream(new MediaOptions {Width = NormalWidth});
break;
}
case PhotoSize.Small:
if (imageWidth >= SmallWidth && imageWidth % SmallWidth == 0)
{
photoMediaStream = photoMedia.GetStream(new MediaOptions {Width = SmallWidth});
break;
}
case PhotoSize.Thumb:
if (imageWidth >= ThumbWidth && imageWidth % ThumbWidth == 0)
{
photoMediaStream = photoMedia.GetStream(new MediaOptions {Width = ThumbWidth});
break;
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,如果条件为真,我想做一些事情,然后突破switch语句,但如果不是,我只想进入下一个案例.
class switch1
{
public static void main(String args[])
{
int a = 10;
switch(a)
{
default: System.out.println("Default");
case -1: System.out.println("-1");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这个程序将执行"default"和"case -1"语句,因为在匹配条件之后没有指定break(在这种情况下是在"default"之后).
但我不明白的是
a)为什么break需要在switch声明中?
b)为什么它甚至执行无效匹配条件的语句(即执行"case -1"))如果它只是匹配的话?
我最近继承了一些写得很差的代码.不幸的是,它是一个我们高度依赖的系统,并且没有时间重新编写它,所以我坚持维护它并重新编写片段.但是,今天我偶然发现这个包含一个开关的方法,其中一个case语句没有中断.这怎么能编译?我的理解是所有案件都必须打破,返回或转到.
private void ReadBadge_Activated(object sender, EventArgs e)
{
try
{
if (!bInHideMode)
{
// Set Button states
btnCancelSwipe.Visible = true;
btnCancelSwipe.Refresh();
// Enable the Timeout timer
//tmrTimeout.Enabled = true;
// Refresh data
switch (mManageAction)
{
case "LogOnManager":
case "NormalUse":
lblSwipeStatus.Text = "Pass ID Badge\nNear The Reader";
break;
case "AddNewUser":
lblSwipeStatus.Text = "Pass ID Badge\nNear The Reader\nFor: " + mUserName;
break;
default:
lblSwipeStatus.Text = "Pass ID Badge\nNear The Reader\nFor: " + mUserName;
break;
}
}
}
catch (Exception ex)
{
MessageBoxNoClick.MessageBox2(ex.Message, …Run Code Online (Sandbox Code Playgroud)