我想知道是否可以在 C# 的 switch 语句中有条件地跳出 case。举个例子。
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;
}
}
基本上,如果条件为真,我想做一些事情然后跳出 switch 语句,但如果不是,我只想进入下一个情况。
最佳答案
由于您不能隐式地进入下一个案例,您必须使用 goto
语句显式地进行。这是可以接受使用此语句的罕见情况之一...
MediaStream photoMediaStream = null;
switch (photoSize)
{
case PhotoSize.Normal:
if (imageWidth >= NormalWidth && imageWidth % NormalWidth == 0)
{
photoMediaStream = photoMedia.GetStream(new MediaOptions {Width = NormalWidth});
break;
}
goto case PhotoSize.Small;
case PhotoSize.Small:
if (imageWidth >= SmallWidth && imageWidth % SmallWidth == 0)
{
photoMediaStream = photoMedia.GetStream(new MediaOptions {Width = SmallWidth});
break;
}
goto case PhotoSize.Thumb;
case PhotoSize.Thumb:
if (imageWidth >= ThumbWidth && imageWidth % ThumbWidth == 0)
{
photoMediaStream = photoMedia.GetStream(new MediaOptions {Width = ThumbWidth});
break;
}
}
无论如何,使用 if
语句重构它可能会更好:
MediaStream GetPhotoMediaStream(PhotoSize photoSize, /* whatever parameters you need... */)
{
if (photoSize == PhotoSize.Normal)
{
if (imageWidth >= NormalWidth && imageWidth % NormalWidth == 0)
{
return photoMedia.GetStream(new MediaOptions {Width = NormalWidth});
}
photoSize = PhotoSize.Small;
}
if (photoSize == PhotoSize.Small)
{
if (imageWidth >= SmallWidth && imageWidth % SmallWidth == 0)
{
return photoMedia.GetStream(new MediaOptions {Width = SmallWidth});
}
photoSize = PhotoSize.Thumb;
}
if (photoSize == PhotoSize.Thumb)
{
if (imageWidth >= ThumbWidth && imageWidth % ThumbWidth == 0)
{
return photoMedia.GetStream(new MediaOptions {Width = ThumbWidth});
}
}
return null;
}
关于c# - 开关盒内部的条件中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9704728/