我有这个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;
}
}
提到的enum
是:
private enum VMLDimensionType
{
unset = 0,
full = 1,
size = 2,
position = 3
}
这是如此简单,我确信有更简洁,更易读的方式来表达这一点。
NB如果不是因为默认情况下VS强加的荒谬的“每条一条线”规则我可能不会那么烦恼。例如在VB中,我可能会从此代码块中丢失大约10行! (关于这一点的任何想法?)
答案 0 :(得分:9)
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;
}
答案 1 :(得分:8)
一种选择是VMLDimensionType
Flags
枚举:
[Flags]
enum VMLDimensionType
{
Unset = 0,
Size = 1,
Position = 1 << 1,
Full = Size | Position
}
然后:
ret.Type = VMLDimensionType.Unset;
if(width != null && height != null)
ret.Type |= VMLDimensionType.Size;
if (top != null && left != null)
ret.Type |= VMLDimensionType.Position;
答案 2 :(得分:5)
这个怎么样:
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;
}
答案 3 :(得分:1)
这个怎么样:
if(width != null && height != null)
ret.type = top != null && left != null ? VMLDimensionType.full : VMLDimensionType.size;
else
ret.type = top != null && left != null ? VMLDimensionType.positon : VMLDimensionType.unset;
答案 4 :(得分:1)
我想提取GetDimensionType()方法。 并且它不是那么小,而是更具可读性和自我描述性。
private VMLDimensionType GetDimensionType()
{
bool hasSize = width != null && height != null;
bool hasPosition = top != null && left != null;
if (hasSize && hasPosition)
return VMLDimensionType.full;
if (hasSize)
return VMLDimensionType.size;
if (hasPosition)
return VMLDimensionType.positon;
return VMLDimensionType.unset;
}
用法:
ret.type = GetDimensionType();