0

我在我的 c# 应用程序中创建了一种数据驱动的方式来创建 UI 元素,这些元素让我可以在运行时调试非引用类型变量(bools、ints 等)以进行调试。因为,你不能在 c# 中存储引用(就像你可以在 C++ 中传递一个指针一样),如在 c# 中存储引用中所述,我必须创建委托来获取和设置任何我想调试的变量这样的:

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

我希望不必每次都编写此泡泡糖代码,以便调试表单中的代码生成控件更新传入的变量(通过表单复选框的 Click 事件)。有什么方法可以让它工作,以便我可以以以下方式调用该函数(或类似的简单方式)?

createCheckboxSetting("Debug Bool", ref testBool);

如果我尝试在 createCheckboxSetting 中创建委托,我会收到以下错误:“无法在匿名方法、lambda 表达式或查询表达式中使用 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 回答