C# IF-else块中存在重复代码…如何缩短代码?

C# IF-else块中存在重复代码…如何缩短代码?,c#,asp.net,telerik,C#,Asp.net,Telerik,[编辑] 在IF-else块中,这是重复的代码…如何缩短它?好的,我试过了。它成功了 if ((e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString()) == null) { Int32 LangID = -1; string QuesTypeID = com.Encrypt(Typ

[编辑]
在IF-else块中,这是重复的代码…如何缩短它?

好的,我试过了。它成功了

if ((e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString()) == null) 
                {
                    Int32 LangID = -1;
                    string QuesTypeID = com.Encrypt(TypeID.ToString(), com.KeyCode);
                    string LanguageID = com.Encrypt(LangID.ToString(), com.KeyCode);
                    string QuesID = com.Encrypt(ID.ToString(), com.KeyCode);
                    string PID = com.Encrypt(radGridQues.CurrentPageIndex.ToString(), com.KeyCode.ToString());
                    Response.Redirect(ROSDAAB.Constants.SiteURL + "editQues/" + "QuesID/" + QuesID + "/" + PID + "/" + QuesTypeID + "/" + LanguageID);
                }
                else   
                {

                    Int32 LangID = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString());
                    string QuesTypeID = com.Encrypt(TypeID.ToString(), com.KeyCode);
                    string LanguageID = com.Encrypt(LangID.ToString(), com.KeyCode);
                    string QuesID = com.Encrypt(ID.ToString(), com.KeyCode);
                    string PID = com.Encrypt(radGridQues.CurrentPageIndex.ToString(), com.KeyCode.ToString());
                    Response.Redirect(ROSDAAB.Constants.SiteURL + "editQues/" + "QuesID/" + QuesID + "/" + PID + "/" + QuesTypeID + "/" + LanguageID);
                }
为什么要使用ToString()

只需注意底层类型

if (e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"] == null)
至于较短的:

Int32 LangID = (Int32)e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"];
如果空检查不起作用,请尝试
!如果值来自数据源,则转换.IsDBNull(),

int LangID = e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"] != null ? (int)e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"] : -1;
string QuesTypeID = com.Encrypt(TypeID.ToString(), com.KeyCode);
string LanguageID = com.Encrypt(LangID.ToString(), com.KeyCode);
string QuesID = com.Encrypt(ID.ToString(), com.KeyCode);
string PID = com.Encrypt(radGridQues.CurrentPageIndex.ToString(), com.KeyCode.ToString());
Response.Redirect(ROSDAAB.Constants.SiteURL + "editQues/" + "QuesID/" + QuesID + "/" + PID + "/" + QuesTypeID + "/" + LanguageID);
以下是我在这里所做的:

  • 从if中提取LangID,将其设置为默认值-1,并且仅在LanguageID不为null时更新它
  • 由于不再需要else,所以将在if/else子句中复制的公共部分放在if检查之后
    • 您可以在下面编写代码:-

      Int32 LangID = -1;
      if (e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"] != null) 
      {
          LangID = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString());
      }
      string QuesTypeID = com.Encrypt(TypeID.ToString(), com.KeyCode);
      string LanguageID = com.Encrypt(LangID.ToString(), com.KeyCode);
      string QuesID = com.Encrypt(ID.ToString(), com.KeyCode);
      string PID = com.Encrypt(radGridQues.CurrentPageIndex.ToString(), com.KeyCode.ToString());
      Response.Redirect(ROSDAAB.Constants.SiteURL + "editQues/" + "QuesID/" + QuesID + "/" + PID + "/" + QuesTypeID + "/" + LanguageID);
      

      还可以使用三元运算符减少重复次数:

         bool isOk = String.IsNullOrEmpty(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString());    
         Int32 LangID = isOk ? -1 : Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString()); ;
         string QuesTypeID = com.Encrypt(TypeID.ToString(), com.KeyCode);
         string LanguageID = com.Encrypt(LangID.ToString(), com.KeyCode);
         string QuesID = com.Encrypt(ID.ToString(), com.KeyCode);
         string PID = com.Encrypt(radGridQues.CurrentPageIndex.ToString(), com.KeyCode.ToString());
         Response.Redirect(ROSDAAB.Constants.SiteURL + "editQues/" + "QuesID/" + QuesID + "/" + PID + "/" + QuesTypeID + "/" + LanguageID);
      

      字符串QuesTypeID=com.Encrypt(TypeID.ToString(),com.KeyCode); 字符串LanguageID=com.Encrypt(LangID.ToString(),com.KeyCode); 字符串QuesID=com.Encrypt(ID.ToString(),com.KeyCode); 字符串PID=com.Encrypt(radGridQues.CurrentPageIndex.ToString(),com.KeyCode.ToString())


      好的,我也会改的。你能帮我缩短代码吗?thnxok我尝试删除它..我在下面实现的方法是有效的。您还没有解决重复分配LangID变量的长行的问题。
      Int32 LangID = -1;
      if (e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"] != null) 
      {
          LangID = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString());
      }
      string QuesTypeID = com.Encrypt(TypeID.ToString(), com.KeyCode);
      string LanguageID = com.Encrypt(LangID.ToString(), com.KeyCode);
      string QuesID = com.Encrypt(ID.ToString(), com.KeyCode);
      string PID = com.Encrypt(radGridQues.CurrentPageIndex.ToString(), com.KeyCode.ToString());
      Response.Redirect(ROSDAAB.Constants.SiteURL + "editQues/" + "QuesID/" + QuesID + "/" + PID + "/" + QuesTypeID + "/" + LanguageID);
      
         bool isOk = String.IsNullOrEmpty(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString());    
         Int32 LangID = isOk ? -1 : Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString()); ;
         string QuesTypeID = com.Encrypt(TypeID.ToString(), com.KeyCode);
         string LanguageID = com.Encrypt(LangID.ToString(), com.KeyCode);
         string QuesID = com.Encrypt(ID.ToString(), com.KeyCode);
         string PID = com.Encrypt(radGridQues.CurrentPageIndex.ToString(), com.KeyCode.ToString());
         Response.Redirect(ROSDAAB.Constants.SiteURL + "editQues/" + "QuesID/" + QuesID + "/" + PID + "/" + QuesTypeID + "/" + LanguageID);
      
      var tempLangId = e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"];
      Int32 LangID = tempLangId == null ? -1 : Convert.ToInt32(tempLangId);
      
          Int32 LangId = -1;
      
          if ((e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString()) != null) 
          {
                      Int32 LangID = Convert.ToInt32(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["LanguageID"].ToString());
          }
      
      
          Response.Redirect(ROSDAAB.Constants.SiteURL + "editQues/" + "QuesID/" + QuesID + "/" + PID + "/" + QuesTypeID + "/" + LanguageID);