2

我有这个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
}

它是如此简单,我确信有一种更简洁、更易读的方式来表达这一点。

注意,如果不是因为 VS 默认强制实施的荒谬的“每行一个大括号”规则,我可能不会那么烦恼。例如,在 VB 中,我可能会从这个代码块中丢失大约 10 行!(对此有什么想法吗?)

4

5 回答 5

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;
}
于 2011-01-05T11:58:01.983 回答
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;
于 2011-01-05T12:05:26.470 回答
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;
}
于 2011-01-05T11:57:09.047 回答
2

我想提取 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();
于 2011-01-05T12:10:16.153 回答
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;
于 2011-01-05T11:59:42.487 回答