web-dev-qa-db-ja.com

C#4.0:デフォルト値でオプションパラメータとしてColorを使用できますか?

    public void log(String msg, Color c = Color.black)
    {
        loggerText.ForeColor = c;
        loggerText.AppendText("\n" + msg);

    }

この結果、cはコンパイル時の定数でなければならないというエラーが発生します。私はこれについて少し読みましたが、ほとんどの例は文字列と整数を扱っています。 colorconverterクラスを使用できることがわかりましたが、非常に効率的かどうかはわかりません。オプションのパラメーターとして基本色を渡す方法はありますか?

    public void log(String msg, String c = "Black")
    {
        ColorConverter conv = new ColorConverter();
        Color color = (Color)conv.ConvertFromString(c);

        loggerText.ForeColor = color;
        loggerText.AppendText("\n" + msg);
    }
57
DTown

私もこれに遭遇しましたが、私が見つけた唯一の回避策はnullableを使用することです。

public void log(String msg, Color? c = null)
{
    loggerText.ForeColor = c ?? Color.Black;
    loggerText.AppendText("\n" + msg);
}

その他の可能な構文は次のとおりです。

loggerText.ForeColor = c.GetValueOrDefault(Color.Black);
106
scobi

ColorがColor.Empty(デフォルト値:default(Color))かどうかを確認するか、null許容値を使用してnullを確認します。

public void log(String msg, Color? c = null) { ... }
9
Simon

色を指定しないでください。代わりに「エラーレベル」を指定し、各エラーレベルと色の値の間のマッピングを行います。こうすると、0以下が黒になり、1 =琥珀色、> 2 =赤になります。デフォルト値や値を指定しないことについて心配する必要はありません。

3
Neil Barnwell

使用方法の提案:

public GraphicsLine(Point startPoint, Point endPoint, Color? color = null, double width = 1.0)
{
    StartPoint = startPoint;
    EndPoint = endPoint;
    Color = color ?? Colors.Black;
    Width = width;
}
1
Eric Ouellet