繁体   English   中英

ASP.NET C#优化代码

[英]asp.net c# optimizing code

只是觉得我在这里浪费循环= CPU时间,并且想知道是否有一种方法可以优化此代码,或者只是将其最小化。

基本上,代码的作用是通过editOkkInfo控件内的每个控件。 检查当前控件是否为文本框,如果是,则它将执行一些操作,如果否,则跳至下一个if语句。 下一条语句检查是否计数了14次(因为我只有14个文本框),如果不是14,则循环继续,如果计数为14,则循环中断。

感谢您的任何帮助,在此先感谢,这里的代码非常欢呼。

iterate = 0;
foreach (System.Web.UI.Control ctrl in this.editOkkInfo.Controls)
{
    if (ctrl is TextBox)
    {
        tb = (TextBox)this.FindControl(ctrl.ClientID.ToString());
        tb.Text = dt.DefaultView[0][iterate++].ToString();
    }
    if (iterate == 14)
       break;
}

您已经拥有控件,因此无需使用FindControl 只需投放:

iterate = 0;

foreach (System.Web.UI.Control ctrl in this.editOkkInfo.Controls)
{
    if (ctrl is TextBox)
    {
        tb = (TextBox)ctrl;
        tb.Text = dt.DefaultView[0][iterate++].ToString();
    }

    if (iterate == 14)
        break;
}

可读性的进一步提高将消除所有控件和is测试的循环:

foreach (TextBox ctrl in this.editOkkInfo.Controls)
{
    ctrl.Text = dt.DefaultView[0][iterate++].ToString();

    if (iterate == 14)
        break;
}

您可以通过强制转换ctrl变量来保存FindControl()解析:

tb = (TextBox) ctrl;
tb.Text = //...

并且,我们应该知道editOkkInfo.Controls是通过代码创建还是在aspx页面中声明。 如果前者为true,则可以将对此类对象的引用保存在变量中,然后使用它而不是循环。

if (ctrl is TextBox)
{
    tb = (TextBox)ctrl;
}

这应该足够了,您知道使用了FindControl来查找TextBox因此,您可以将TextBox投射到TextBox

我已经看到一种更快的方法来查找特定类型的所有控件,而不是循环。 这似乎更有效。 使用linq获取网页中某些类型的Web控件的列表希望对Milind有帮助

我认为反而foreach会更好一些,因为一会儿不会检查所有控件,直到数量为14为止(能否检查所有控件,取决于!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM