c# - 如何将两种方法转换为一种方法以提高效率?

标签 c# .net winforms linq refactoring

如何将两个方法转换为一个方法,既能提高效率又能使代码清晰简洁?

我还有三个这样的条件要检查,但我没有提到(那太长了):

 public void getmembershipstatusmembers()
 {
        if (cbGEStatustype.Text != "")
        {
            var totalmembers = from tsgentity in eclipse.members
                               join memtomships in eclipse.membertomships on tsgentity.member_Id equals memtomships.member_Id
                               join mshipoptiions in eclipse.mshipoptions on memtomships.mshipOption_Id equals mshipoptiions.mshipOption_Id
                               join mshiptypes in eclipse.mshiptypes on mshipoptiions.mshipType_Id equals mshiptypes.mshipType_Id
                               join mshipstatus in eclipse.mshipstatustypes on memtomships.mshipStatusType_Id equals mshipstatus.mshipStatusType_Id
                               where mshipstatus.mshipStatusType_Name.StartsWith(cbGEStatustype.Text)
                               select new
                               {
                                   tsgentity.member_Id,
                                   tsgentity.member_Lastname,
                                   tsgentity.member_Firstname,
                                   tsgentity.member_Postcode,
                                   tsgentity.member_Reference,
                                   tsgentity.member_CardNum,
                                   tsgentity.member_IsBiometric,
                                   tsgentity.member_Dob,
                                   mshiptypes.mshipType_Name,
                                   mshipstatus.mshipStatusType_Name,
                                   memtomships.memberToMship_EndDate
                               };
            dgvReportMembers.DataSource = totalmembers;       
        }
    }
    public void getcardnumbers()
    {
        if (txtcardnum.Text != "")
        {
            var totalmembers = from tsgentity in eclipse.members
                               join memtomships in eclipse.membertomships on tsgentity.member_Id equals memtomships.member_Id
                               join mshipoptiions in eclipse.mshipoptions on memtomships.mshipOption_Id equals mshipoptiions.mshipOption_Id
                               join mshiptypes in eclipse.mshiptypes on mshipoptiions.mshipType_Id equals mshiptypes.mshipType_Id
                               join mshipstatus in eclipse.mshipstatustypes on memtomships.mshipStatusType_Id equals mshipstatus.mshipStatusType_Id
                               where tsgentity.member_CardNum.StartsWith(txtcardnum.Text)
                               select new
                               {
                                   tsgentity.member_Id,
                                   tsgentity.member_Lastname,
                                   tsgentity.member_Firstname,
                                   tsgentity.member_Postcode,
                                   tsgentity.member_Reference,
                                   tsgentity.member_CardNum,
                                   tsgentity.member_IsBiometric,
                                   tsgentity.member_Dob,
                                   mshiptypes.mshipType_Name,
                                   mshipstatus.mshipStatusType_Name,
                                   memtomships.memberToMship_EndDate
                               };
            dgvReportMembers.DataSource = totalmembers;
        }

    }

我正在寻找这样的东西:

 private void allmembers()
 {
       var members = from ......
                          .......
                          .......
        if (cbGEStatustype.Text != "")
        {
           dgvreports.datasource = members.where(.......)
         }
         if (txtcardnum.Text != "")
         {    
             dgvreports.datasource = members.where(.......)
         }
    }

最佳答案

你找错人了。让一种方法完成其他两种方法的工作有时是个好主意,但永远不会使您的代码显着提高(或降低)效率。

建议的更改是否会使您的代码更清晰?这是值得做的。它会减少重复吗?这也值得做。这是正确的改变吗?查看您的代码,我猜想更好的方法是将方法的公共(public)部分提取到新方法中,然后从现有方法中调用该新方法。

关于c# - 如何将两种方法转换为一种方法以提高效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7421292/

相关文章:

c# - 用于显示图像的 Windows 窗体文本框

c# - 代码生成时遇到 VS2015 错误,更改未提交到源

C# 获取操作系统名称 Windows 8.1

c# - 如何在 C# 中发生异常后跳出一系列单独的语句

c# - 在 ASP.NET 中限制每个用户只有一个 session

c# - 如何在 Xaml 中绑定(bind)来自 Properties.Resources 的图像?

c# - 使用文件 URL 启动 Edge

c# - 如何播放 Windows 通知声音? (它未在 System.Media.SystemSounds 中定义)

c# - 使用 Facebook C# SDK 检查 Facebook 登录状态并获取 session 详细信息

c# - 不使用 LINQ 的原因