为什么我不能使用参数字符串来命名我的按钮?

时间:2017-03-02 14:54:04

标签: c# .net parameters abstract

我在后端创建了很多按钮,因此我认为将其抽象出来以减少代码行是很明智的。当我尝试这样做时,它给我一个错误说"一个名为" buttonName"的本地或参数。不能在此范围内声明,因为该名称用于封闭的本地范围以定义本地或参数"。我在这里错过了什么吗?我认为这是在这种情况下使用参数的确切原因。

以下是我尝试做的一个例子。

转过来

Button buttonDetailsEdit = new Button();
buttonDetailsEdit.ID = "ButtonDetailsEdit";
buttonDetailsEdit.Text = "Edit";
buttonDetailsEdit.UseSubmitBehavior = false;
buttonDetailsEdit.Click += new EventHandler(EditCall);
PlaceHolderDetailsContent.Controls.Add(buttonDetailsEdit);

Button buttonDetailsBack = new Button();
buttonDetailsBack.ID = "ButtonDetailsBack";
buttonDetailsBack.Text = "Back to List";
buttonDetailsBack.UseSubmitBehavior = false;
buttonDetailsBack.Click += new EventHandler(IndexCall);
PlaceHolderDetailsContent.Controls.Add(buttonDetailsBack);

进入此(使用方法调用代替旧代码)

void CreateButton(string buttonName, string buttonIDText, string buttonText, PlaceHolder PlaceHolderName, string methodCall)
{
    Button buttonName = new Button();
    buttonName.ID = buttonIDText;
    buttonName.Text = buttonText;
    buttonName.UseSubmitBehavior = false;
    buttonName.Click += new EventHandler(methodCall);
    PlaceHolderName.Controls.Add(buttonName);
}

methodCall部分也在这里抛出错误,我假设由于" methodCall"在这种情况下不存在。

3 个答案:

答案 0 :(得分:7)

在同一范围内,您不能将两个变量string buttonNameButton buttonName具有相同的名称。

尝试将按钮重命名为,例如Button newButton

答案 1 :(得分:2)

您已声明名为buttonName的参数:

string buttonName

您已声明了一个同名的Button变量:

Button buttonName

你不能兼得。这就是编译器所抱怨的。

现在,实际上,您的问题似乎是您希望将参数的内容用作本地变量名称。这通常是不可能的 - 变量名必须在编译时知道,而不仅仅是在运行时。

幸运的是,你实际上并不需要 - 在你的方法中调用你的本地Button变量并不重要,因为当方法结束时,该名称将会丢失(实际上,它甚至可能不会它通过编译)。重要的是,每次调用方法时,都会创建一个新的Button 实例(并最终添加到列表中)。

因此,只需将Button变量重命名为newButton并删除buttonName参数,因为它已不再使用。

答案 2 :(得分:-1)

重用了变量名buttonNamemethodCall的类型不正确。您需要一个委托参数来允许将所选函数传递给方法。

void CreateButton(string buttonName, 
                  string buttonIDText, 
                  string buttonText, 
                  PlaceHolder placeHolder, 
                  EventHandler methodCall) // needed to fix your type
{
    var button = new Button(); //reused variable name
    button.ID = buttonIDText;
    button.Name = buttonName; //you missed assigning the button name
    button.Text = buttonText;
    button.UseSubmitBehavior = false;
    button.Click += methodCall; // you dont need to do new EventHandler
    placeHolder.Controls.Add(button);
}