如何避免以优雅的方式创建不需要的对象?

Sea*_*ive 5 c#

我的问题的根源是C#编译器太聪明了.它可以检测通过该物体可能是不确定的路径,这样的要求,我填满它.在代码中,我看在DataSet中的表,看是否有一个我想要的.如果没有,我会创建一个新的.我知道,dtOut总是被分配一个值,但除非它声明时所分配的值,编译器不开心.这是不优雅的.

如何以更优雅的方式重写它?

             System.Data.DataTable dtOut = new System.Data.DataTable();
            .
            .
            // find table with tablename = grp
            // if none, create new table
            bool bTableFound = false;
            foreach (System.Data.DataTable d1 in dsOut.Tables)
            {
                string d1_name = d1.TableName;
                if (d1_name.Equals(grp))
                {
                    dtOut = d1;
                    bTableFound = true;
                    break;
                }
            }

            if (!bTableFound) dtOut = RptTable(grp);
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 11

您可以像这样重写您的方法:

System.Data.DataTable dtOut = dsOut
                                   .Tables
                                   .Cast<System.Data.DataTable>()
                                   .FirstOrDefault(t => t.TableName.Equals(grp)) 
                                 ?? RptTable(grp);
Run Code Online (Sandbox Code Playgroud)


ito*_*son 11

初始值可以是null.编译器不要求您创建实例 ; 它只需要你分配一个值.

System.Data.DataTable dtOut = null;  // compiler is now happy
// rest of code as before
Run Code Online (Sandbox Code Playgroud)