为什么我不能使用参数字符串来命名我的按钮?
Why can't I use a parameter string to name my button?
我在后端创建了很多按钮,所以我认为将其抽象出来以减少代码行数是明智的。但是,当我尝试这样做时,它给我一个错误,提示 "A local or parameter named "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" 在此实例中不存在。
您不能在同一范围内使用同名的两个变量 string buttonName
和 Button buttonName
。
尝试将您的按钮重命名为 Button newButton
您声明了一个名为 buttonName
:
的参数
string buttonName
并且你声明了一个同名的Button
变量:
Button buttonName
你不能两者兼得。这就是编译器所抱怨的。
现在,实际上,您的问题似乎是您想使用参数的 content 作为局部变量名。这通常是不可能的 - 变量名称必须在编译时已知,而不仅仅是在运行时。
幸运的是,您实际上并不需要它 - 在您的方法中调用什么本地 Button
变量并不重要,因为该名称将在方法结束时丢失(实际上,它可能不会甚至通过编译实现)。重要的是,每次调用您的方法时,都会创建一个新的 Button
实例 (并最终添加到列表中)。
因此,只需将 Button
变量重命名为 newButton
并删除 buttonName
参数,因为它不再被使用。
变量名buttonName
被重用,methodCall
的类型不正确。您需要一个委托参数以允许将选定的函数传递到方法中。
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);
}
我在后端创建了很多按钮,所以我认为将其抽象出来以减少代码行数是明智的。但是,当我尝试这样做时,它给我一个错误,提示 "A local or parameter named "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" 在此实例中不存在。
您不能在同一范围内使用同名的两个变量 string buttonName
和 Button buttonName
。
尝试将您的按钮重命名为 Button newButton
您声明了一个名为 buttonName
:
string buttonName
并且你声明了一个同名的Button
变量:
Button buttonName
你不能两者兼得。这就是编译器所抱怨的。
现在,实际上,您的问题似乎是您想使用参数的 content 作为局部变量名。这通常是不可能的 - 变量名称必须在编译时已知,而不仅仅是在运行时。
幸运的是,您实际上并不需要它 - 在您的方法中调用什么本地 Button
变量并不重要,因为该名称将在方法结束时丢失(实际上,它可能不会甚至通过编译实现)。重要的是,每次调用您的方法时,都会创建一个新的 Button
实例 (并最终添加到列表中)。
因此,只需将 Button
变量重命名为 newButton
并删除 buttonName
参数,因为它不再被使用。
变量名buttonName
被重用,methodCall
的类型不正确。您需要一个委托参数以允许将选定的函数传递到方法中。
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);
}