C# 编程-使用OR和倒格的条件

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" 第二,我还需要检查一个倒格

我用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"
第二,我还需要检查一个倒格(希望我能用倒格表达自己)

目前我正在使用这个代码(它正在工作)。 但对我来说似乎不是很优雅,所以我想知道是否存在一个更好的方法来实现同样的目标。 我对编码相当陌生,我会很感激你的例子

谢谢你们的帮助


使用括号():

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)$"))