0

C# アプリケーションでデータ駆動型の方法を作成して、デバッグ目的で実行時に非参照型変数 (bool、int など) をデバッグできるようにする UI 要素を作成しました。c# で参照を保存することはできないため (C++ でポインターを渡した場合と同様)、 「 c# で参照を保存する」で説明されているように、デバッグしたい変数を取得および設定するデリゲートを作成する必要があります。そのような:

createCheckboxSetting("Debug Bool",
                      delegate(bool newVal) { testBool = newVal; },
                      delegate() { return testBool; });

デバッグ フォームでコード生成されたコントロールが (フォーム チェックボックスの Click イベントを介して) 渡された変数を更新するために、このバブルガム コードを毎回記述する必要はありません。代わりに次の方法で関数を呼び出すことができるように、これを機能させる方法はありますか (または比較的単純なもの)?

createCheckboxSetting("Debug Bool", ref testBool);

createCheckboxSetting 内でデリゲートを作成しようとすると、「匿名メソッド、ラムダ式、またはクエリ式内で ref または out パラメーター 'VARIABLE_NAME' を使用できません。」これを行うためのよりクリーンな方法がある場合、私はその方法を本当に知りません。明白な理由から、これをすばやく簡単に使用できるようにしたいと思っています。

私はまだ C# に慣れようとしているので、本当に助かります。ご提案ありがとうございます。

4

1 に答える 1

0

あなたの質問を完全に理解しているとは言えませんが、非参照型の「変数」(フィールド?)を参照可能にしたい場合は、それらをクラス内に配置できます。たとえば、文字列または整数定数を FieldBase クラスにマッピングするディクショナリ フィールドを作成し、必要なすべての FieldBase オブジェクトをそのディクショナリに格納して、それらを名前で検索します。FieldBase クラスは非ジェネリックにすることができ、派生クラスはジェネリックにすることができます。

abstract class FieldBase
{
    public readonly string Name;
    protected FieldBase(string name) { Name = name; }
}
sealed class Field<T> : FieldBase where T : struct
{
    public Field(string name) : base(name) { }
    public T Value;
}
于 2013-06-05T17:12:54.137 に答える