2013-11-15 32 views
0

功能**在功能使用PARAMS這樣C#是一個很好的做法

private void GetComboxItems(params int[] type) 
     { 
      try 
      { 
       /* DEPARTMENT CODE */ 
       if (type[0] == 1) 
       { 
        cmbDept.Items.Clear(); 
        using (SFCDataContext SFC = new SFCDataContext()) 
        { 
         var Dept = (from i in SFC.Systems_SettingsDepartments 
            orderby i.Department_ID 
            select i); 

         foreach (var q in Dept) 
         { 
          cmbDept.Items.Add(q.Department_ID); 
         } 

         SFC.Connection.Close(); 
        }      
       } 
       /* CORRECTIVE ACTION RECORD CODE */ 
       if (type[1] == 1) 
       { 
        cmbCARNo.Items.Clear(); 
        using (SFCDataContext SFC = new SFCDataContext()) 
        { 
         var CarNo = (from i in SFC.Systems_CARLogSheets 
            orderby i.CARDocNo 
            where i.PostStatus == 0 
            select new 
            { 
             Code = i.CARDocNo 
            }); 
         foreach (var w in CarNo) 
         { 
          cmbCARNo.Items.Add(w.Code); 
         } 

         SFC.Connection.Close(); 
        } 
       } 
       /* MEASUREMENT CODE */ 
       if (type[2] == 1) 
       { 
        cmbMeas.Items.Clear(); 
        using (SFCDataContext SFC = new SFCDataContext()) 
        { 

         var Measure = (from i in SFC.Systems_SettingsMeasurements 
             orderby i.Measurement_ID 
             where i.CategoryType == "Measurement" 
             select new 
             { 
              DESC = i.Measurement 
             }); 
         foreach (var e in Measure) 
         { 
          cmbMeas.Items.Add(e.DESC); 
         } 
         SFC.Connection.Close(); 
        } 
       } 
       /* SUB-MEASUREMENT CODE */ 
       if (type[3] == 1) 
       { 
        cmbSubMeas.Items.Clear(); 
        using (SFCDataContext SFC = new SFCDataContext()) 
        { 
         var SubMeas = (from i in SFC.Systems_SettingsMeasurements 
             orderby i.Measurement_ID 
             where i.CategoryType == "Sub-Measurement" 
             select new 
             { 
              DESC = i.Measurement 
             }); 
         foreach (var r in SubMeas) 
         { 
          cmbSubMeas.Items.Add(r.DESC); 
         } 
         SFC.Connection.Close(); 
        } 
       } 
      } 
      catch (Exception ex) 
      { MessageBox.Show(ex.Message.ToString()); } 
     } 

* FORM LOAD **

private void frmSQMProductivityReports_Load(object sender, EventArgs e) 
     { 
      GetComboxItems(1, 0, 1, 0); 
     } 

那爲什麼這個代碼..我的第一條if語句是「真」,所以它遵循if語句中的代碼,它的確如此。現在第二個if語句是「False」,它跳過它裏面的函數。但是現在第三條if語句是「True」,它應該和第一條語句相同,但是因爲我已經檢查過幾次,它會跳過if語句中的函數爲什麼?是否有我的代碼有問題我試着看它,它似乎對我好..

+0

好天啊。當你知道你總是傳入四個參數時,爲什麼這個方法不是'params'?爲什麼你將'int's作爲標誌而不是'bool's?!? – pobrelkey

+0

這並不是一個好主意...... pass seperate parametres –

回答

1

根據您的輸入,符合條件的if條件是第一和第三..請注意,某些語句可以是「跳過「,如果拋出異常,所以在那裏放置斷點或打印日誌可以幫助您更好地瞭解正在發生的事情。

旁註:

  1. 採用params似乎是在這種情況下,多餘的(它主要是用來當一個未知的#arguments應該傳遞),因爲參數的數量是固定的。
  2. 使用bool類型而不是int用於標誌
+0

這也可能是使用'enum'的候選人標誌http://msdn.microsoft.com/en-us/library/system.flagsattribute%28v=vs 0.110%29.aspx – Gusdor

相關問題