如何动态定义类变量作为函数的参数

本文关键字:函数 参数 类变量 定义 何动态 动态 | 更新日期: 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仍然完全独立于您想要更新的对象的类型。