4

プロパティのリストを同時に設定したいのですが、可能ですか? ありがとう!

public class Helper
{
    public bool A { get; set; }
    public bool B { get; set; }
    public bool C { get; set; }

    public void SetToFalse(List<Property> ABC)
    {
        // try to set A, B, C to false in a for loop
        foreach (var item in ABC)
        {
            item = false;
        }
    }
}

これを行う理由: コンテキストが ViewModel であり、プロパティが Xaml にバインドされているため、プロパティをリストにグループ化することはできませんが、ブール型のプロパティを一度に切り替えるクリーンな方法が必要です。

4

4 に答える 4

1

ラムダのリストを使用します。

public class Helper
    {
    public bool A { get; set; }
    public bool B { get; set; }
    public bool C { get; set; }

    public List<Action<bool>> Setters { get; set; }
    public Helper()
        {
        this.Setters = new List<Action<bool>>() 
            { b => this.A = b, b => this.B = b, b => this.C = b };
        }

    public void SetToFalse(IEnumerable<Action<bool>> setters)
        {
        // try to set A, B, C to false in a for loop
        foreach (var a in setters)
            {
            a(false);
            }
        }
    }

あなたはこれを好きですか?

于 2013-07-22T06:10:44.037 に答える
0

それほど多くのブール値フラグをサポートする必要がある場合は、それを Dictionary に変更して、次のようにします。

class Class1
{
    private Dictionary<String, Boolean> boolenVars = new Dictionary<String, Boolean>();

    public Boolean getFlag(String key)
    {
        if (this.boolenVars.ContainsKey(key))
            return this.boolenVars[key];
        else
            return false;
    }

    public void setFlag(String key, Boolean value)
    {
        if (this.boolenVars.ContainsKey(key))
            this.boolenVars[key] = value;
        else
            this.boolenVars.Add(key, value);
    }

    public void clearFlags()
    {
        this.boolenVars.Clear();
    }
}

文字列ベースのキーを使用する代わりに、その目的のために列挙型を作成して、フラグを使用するときにタイプミスがないようにすることができます。

このソリューションでは、7526 個の新しいブール フラグを追加することにした場合でも、それ以上のコード変更は必要ありません。

このソリューションは、パブリック getter またはメソッドを使用してディクショナリを公開する場合、すべての「設定」ブール値フラグのリストも提供します。

于 2013-07-22T08:33:10.973 に答える