C# 有没有办法将变量用作 属性?

C# Is there a way to use a variable AS a property?

我想使用一个变量,这里我使用TextName作为变量。 然后将其用作 属性。当然我不能,因为它是一个字符串,但是我如何才能将 variable/string 视为它所持有的字符串中的文本?在 google 工作表中,这与称为 INDIRECT 的东西非常相似,能够成为您所指的数据。

// Code I like to write:
TextName = "richTextBox";
TextName.Text = "text for richTextBox"; 

我希望该代码被视为

richTextBox.Text = "text for richTextBox";

但是 richTextBox.Text 全部或部分是一个变量,这样我就可以把这整个东西放在一个方法中,只改变变量,而不是整个代码都有一个完整的方法及以上。

如果需要的话,我正在使用 .NET6.0。

我想您将在表单中执行此操作。在这种情况下,您可以将此代码添加到您的表单中:

public string this[string name]
{
    get
    {
        return this.Controls.ContainsKey(name) ?
            this.Controls[name].Text :
            null;
    }
        
    set
    {
        if (this.Controls.ContainsKey(name))
        {
            var control = this.Controls[name];
            control.Text = value;
        }
    }
}

和get/set任意Control的文本是这样的:

this["richTextBox"] = "text for richTextBox";

var text = this["richTextBox"];

this 是你的表格。

如果你打算在多个表单中使用,你可以创建一个扩展方法:

public static class FormExtends
{
    public static string GetText(this Form form, string name, string defaultText = null)
    {
        return form.Controls.ContainsKey(name) ?
            form.Controls[name].Text :
            (defaultText ?? string.Empty);
    }

    public static void SetText(this Form form, string name, string text)
    {
        if (form.Controls.ContainsKey(name))
        {
            var control = form.Controls[name];
            control.Text = text;
        }
    }
}

并简化每种形式的代码:

public string this[string name]
{
    get { return this.GetText(name); }
    set { this.SetText(name, value); }
}