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
}

これは非常に簡単ですが、これを表現するもっと簡潔で読みやすい方法があると確信しています。

NB VS がデフォルトで課すばかげた「1 行に 1 つのブレース」ルールがなければ、おそらくそれほど気にならなかったでしょう。たとえば、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

1 つのオプションはVMLDimensionTypeFlags列挙を行うことです。

[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 に答える