1

したがって、3つのプロパティを持つac#クラスがあります。

public class ClassA
{
    public bool IsBool1;
    public bool IsBool2;
    public bool IsBool3;
}

私は次のことをする方法があります。

public void MethodA()
{
    ClassA c = GetCurrentClassA();
    c.IsBool1 = !c.IsBool1;
    ClassADataAccess.Update(c);
    this.BindClassADetails(c);
}

ここで、他の2つのプロパティに対してMethodAを書き直さないようにするために、3つすべてを処理できるメソッドを作成する方法はありますか?

たぶんこのようなもの?

public void UpdateAndBind(bool value)
{
    ClassA c = GetCurrentClassA();

    ///what to do here to set the property?

    ClassADataAccess.Update(c);
    this.BindClassADetails();
}
4

3 に答える 3

1

あなたのコメントに応えて:

それは完全にうまくいく可能性があります。渡されたオブジェクトのどのプロパティを設定するかをメソッドに指示する方法があるかどうかだけが気になりました。– Chris Whisenhunt

リフレクションを使用する方法があります。

    // using a generic method, you can specify the name of the property you want to set, 
    // the instance you want it set on, and the value to set it to...
    private T SetProperty<T>(T instance, string propertyName, object value)
    {
        Type t = typeof(T);
        PropertyInfo prop = t.GetProperty(propertyName);
        prop.SetValue(instance, value, null);
        return instance;
    }

さて...try/ catchを使用することもできます。また、さまざまな方法で使用する前に、渡されたものを調べて、爆発しないことを確認することもできます...しかし、一般的に、そして最も単純に、それがあなたのやり方です。 dそれをしなさい。幸運を!

于 2012-09-16T21:52:17.600 に答える
1

Func デリゲートを入力パラメーターとして使用して実行できます。

まず、フィールドではなくプロパティを使用する必要があります。

public class ClassA
{
    public bool IsBool1 { get; set; }
    public bool IsBool2 { get; set; }
    public bool IsBool3 { get; set; }
}

次に、入力パラメーターとして 2 つの Func デリゲートが必要です。

public ClassB
{
     public void UpdateAndBind(Func<ClassA, bool> getProp, Func<ClassA, bool, ClassA> setProp)
    {
        ClassA c = GetCurrentClassA();

        // What to do here to set the property?
        setProp(c, getProp(c));

        ClassADataAccess.Update(c);
        this.BindClassADetails(c);
    }
    ...
}

最後に、使用法は次のようになります。

static void Main(string[] args)
{
    ClassB classB = new ClassB();
    classB.UpdateAndBind(classA => classA.IsBool1, (classA, value) => { classA.IsBool1 = !value; return classA; });
    classB.UpdateAndBind(classA => classA.IsBool2, (classA, value) => { classA.IsBool2 = !value; return classA; });
    classB.UpdateAndBind(classA => classA.IsBool3, (classA, value) => { classA.IsBool3 = !value; return classA; });
}
于 2019-09-03T10:11:12.270 に答える
0

メソッドにパラメーターを追加して、GetCurrentClassA必要な値を指定できるようにするのはどうですか?

public void MethodA()
{
    ClassA c = GetCurrentClassA(true, false, true);
    ClassADataAccess.Update(c);
    this.BindClassADetails(c);
}
于 2012-09-16T20:02:46.610 に答える