C# 编程-使用OR和倒格的条件
我用C#, 我的代码中有一个条件语句。 我需要检查OR序列中的一系列o变量 首先我需要检查这个表达式是否正确C# 编程-使用OR和倒格的条件,c#,programming-languages,conditional,C#,Programming Languages,Conditional,我用C#, 我的代码中有一个条件语句。 我需要检查OR序列中的一系列o变量 首先我需要检查这个表达式是否正确 original.RawFormat.Guid == SD.Imaging.ImageFormat.Png.Guid & newCodec == "image/png" || original.RawFormat.Guid == SD.Imaging.ImageFormat.Gif.Guid & newCodec == "image/gif" 第二,我还需要检查一个倒格
original.RawFormat.Guid == SD.Imaging.ImageFormat.Png.Guid & newCodec == "image/png" ||
original.RawFormat.Guid == SD.Imaging.ImageFormat.Gif.Guid & newCodec == "image/gif"
第二,我还需要检查一个倒格(希望我能用倒格表达自己)
目前我正在使用这个代码(它正在工作)。
但对我来说似乎不是很优雅,所以我想知道是否存在一个更好的方法来实现同样的目标。
我对编码相当陌生,我会很感激你的例子
谢谢你们的帮助
使用括号():
if ((original.RawFormat.Guid == SD.Imaging.ImageFormat.Png.Guid & (newCodec == "image/png" ||newCodec == "image/gif")) ||
(original.RawFormat.Guid == SD.Imaging.ImageFormat.Gif.Guid & (newCodec == "image/gif" ||newCodec == "image/png")))
或
以下工作也将起作用:
(original.RawFormat.Guid == SD.Imaging.ImageFormat.Png.Guid ||
original.RawFormat.Guid == SD.Imaging.ImageFormat.Gif.Guid) &&
(newCodec == "image/png" ||newCodec == "image/gif")
你可以这样做:
if (new [] { SD.Imaging.ImageFormat.Png.Guid, SD.Imaging.ImageFormat.Gif.Guid }.Contains(original.RawFormat.Guid)
&& Regex.IsMatch(newCodec, "^image/(png|gif)$")
尽管如此,在生产代码中,我会将其拆分一点:
var imageFormats = new [] { SD.Imaging.ImageFormat.Png.Guid, SD.Imaging.ImageFormat.Gif.Guid };
if (imageFormats.Contains(original.RawFormat.Guid) && Regex.IsMatch(newCodec, "^image/(png|gif)$"))
谢谢Jim,你的代码帮助我理解。。。你们知道其他方法吗?吉博克:这是理解布尔代数和经验的结合。在这个特殊的例子中,您希望从组A(格式)和组B(编解码器)中得到一件东西。因此,表达式本质上是,
if(A&&B)
,其中A
检查格式是否正确,B
检查编解码器是否正确。谢谢你的代码,它真的很有趣。。但是你不认为Regex.Match会增加开销吗?Regex.Match
将匹配“uglyimage/pnggggg!”
,以及包含子字符串image/png
或image/gif
的任何其他内容。要正确,它必须是^image/(png | gif)$
。您所做的任何事情都会增加一定的开销。问题是相对于备选方案的开销是什么,在这种情况下它是否重要?如果代码对性能至关重要,那么您应该衡量每个备选方案并选择最快的。否则,选择最容易阅读和维护的代码。
(original.RawFormat.Guid == SD.Imaging.ImageFormat.Png.Guid ||
original.RawFormat.Guid == SD.Imaging.ImageFormat.Gif.Guid) &&
(newCodec == "image/png" ||newCodec == "image/gif")
if (new [] { SD.Imaging.ImageFormat.Png.Guid, SD.Imaging.ImageFormat.Gif.Guid }.Contains(original.RawFormat.Guid)
&& Regex.IsMatch(newCodec, "^image/(png|gif)$")
var imageFormats = new [] { SD.Imaging.ImageFormat.Png.Guid, SD.Imaging.ImageFormat.Gif.Guid };
if (imageFormats.Contains(original.RawFormat.Guid) && Regex.IsMatch(newCodec, "^image/(png|gif)$"))