El *_*oco 2 c# refactoring code-readability code-snippets conditional-statements
我有这个if-else声明做我想要的.正如你应该能说的那样,它正在做的事情非常简单.
if (width != null && height != null)
{
if (top != null && left != null)
{
ret.type = VMLDimensionType.full;
}
else
{
ret.type = VMLDimensionType.size;
}
}
else
{
if (top != null && left != null)
{
ret.type = VMLDimensionType.positon;
}
else
{
ret.type = VMLDimensionType.unset;
}
}
Run Code Online (Sandbox Code Playgroud)
的enum被称为是:
private enum VMLDimensionType
{
unset = 0,
full = 1,
size = 2,
position = 3
}
Run Code Online (Sandbox Code Playgroud)
它非常简单,我确信有更简洁,更易读的方式来表达这一点.
注意如果不是因为默认情况下VS强加的荒谬的"每条一条线"规则,我可能不会那么烦恼.例如在VB中,我可能会从此代码块中丢失大约10行!(关于那个的任何想法?)
bool hasPosition = (top != null && left != null);
bool hasSize = (width != null && height != null);
if (hasSize)
{
ret.type = hasPosition ? VMLDimensionType.full : VMLDimensionType.size;
}
else
{
ret.type = hasPosition ? VMLDimensionType.positon : VMLDimensionType.unset;
}
Run Code Online (Sandbox Code Playgroud)
一种选择是做VMLDimensionType一个Flags枚举:
[Flags]
enum VMLDimensionType
{
Unset = 0,
Size = 1,
Position = 1 << 1,
Full = Size | Position
}
Run Code Online (Sandbox Code Playgroud)
然后:
ret.Type = VMLDimensionType.Unset;
if(width != null && height != null)
ret.Type |= VMLDimensionType.Size;
if (top != null && left != null)
ret.Type |= VMLDimensionType.Position;
Run Code Online (Sandbox Code Playgroud)
这个怎么样:
bool hasSize = width != null && height != null;
bool hasPosition = top != null && left != null;
if (hasSize && hasPosition)
{
ret.type = VMLDimensionType.full;
}
else if (hasSize && !hasPosition)
{
ret.type = VMLDimensionType.size;
}
else if (!hasSize && hasPosition)
{
ret.type = VMLDimensionType.positon;
}
else
{
ret.type = VMLDimensionType.unset;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |