如何动态定义类变量作为函数的参数
本文关键字:函数 参数 类变量 定义 何动态 动态 | 更新日期: 2023-09-27 17:50:09
我无法为我的问题找到正确的标题,因为我的问题有点奇怪。让我先解释一下我的代码
public class Route
{
public String Id {get;set;}
public string routeNo {get;set;}
public string source {get;set;}
}
类用于数据交换。我有赢的形式,其中有所有领域的路线类。对于每个变量,我有label, TextBox, ErrorLabel
。我有一个函数,可以在休假时调用。
public partial class AddRoute : Form
{
Route r=null;
public AddRoute()
{
InitializeComponent();
r = new Route();
}
private void textBoxSource_Leave(object sender, EventArgs e)
{
showErrorLabel(labelSourceError, textBoxSource.Text, r.source);
}
}
Route类的对象r在初始化的形式构造函数中。
private void showErrorLabelString(Label l, string textboxtext, Route.source a)
{
if ((string.IsNullOrEmpty(s)) || (s.Length > 50))
{
isError = isError && false;
l.Text = "Please Enter Data and Should be smaller than 50 Character";
l.Visible = true;
}
else
{
a = textboxtext;
}
}
现在是解释问题的时候了。我想要所有文本框离开事件的通用函数showErrorLabelString(Label l, string textboxtext, Route.source a
,这将检查数据是否正确,如果是,将其分配给类变量。但问题是,showErrorLabelString()
中的data type
应该是什么,才能动态识别i类的哪个变量需要赋值。现在你必须想想你为什么要这样做,原因
- 提高性能
- 所有的数据都在休假事件中验证并分配给类对象,这将节省少量的
if else condition
来检查数据是否验证。 - 减少按钮点击事件的负载。
- 最后是尝试一些不同的东西。
我认为你需要一个Action委托。
它的工作原理就像一个函数指针,你的函数接受它作为参数,当你调用它时,你传递给它你想执行的函数。
private void textBoxSource_Leave(object sender, EventArgs e)
{
showErrorLabel(labelSourceError, textBoxSource.Text, val => r.source = val);
}
private void showErrorLabelString(Label l, string textboxtext, Action<string> update)
{
if ((string.IsNullOrEmpty(s)) || (s.Length > 50))
{
isError = isError && false;
l.Text = "Please Enter Data and Should be smaller than 50 Character";
l.Visible = true;
}
else
{
update(textboxtext);
}
}
通过这种方式,showErrorLabelString仍然完全独立于您想要更新的对象的类型。