2017-03-03 73 views
1

我想創建一個方法與一個可選的泛型類型,以最大限度地減少SQL數據庫上的查詢數量。 (如果數據已經可用,則不需要運行查詢)可選的泛型類型,而無需手動指定類型

// Returns proper DataTable for selected Schedule 
    public static DataTable BuildReportTable<T>(Report report, List<T> InputList = null) 
    { 
     switch (report.ReportBase) 
     { 
      // Work Order Report 
      case 1: 
       List<ReportWorkOrder> wos = new List<ReportWorkOrder>(); 
       if (InputList == null) 
       { 
        // Build WorkOrderReportList for report if none was passed 
        PullSQLData(() => 
        { 
         wos = MPulseQueries.WorkOrderTableQuery(); 
        }, 30, 46, "Failed to pull Work Order Data to generate table"); 
       } 
       else 
       { 
        // If WorkOrderReportList was passed, use it 
        wos = InputList as List<ReportWorkOrder>; 
       } 
       switch (WOFilters[report.Filter][0]) 
       { 
        case 0: //If all work orders report 
         return AllWOTable(report, wos); 
        case 1: //If open non PM work orders report 
         return OpenNonPMTable(report, wos); 
        case 2: //If open PM work orders report 
         return PMTable(report, wos); 
        case 3: //If open fluid change work orders report 
         return FluidChangeTable(report, wos); 
        case 4: //If custom filter work orders report 
         return CustomFilterTable(report, wos); 
        default: 
         return new DataTable(); 
       } 
      default: 
       return new DataTable(); 
     } 
    } 

此代碼編譯時沒有問題並按預期執行。我唯一的問題是,爲了調用這個方法沒有可選參數,我必須手動指定一個類型。

DataTable DisplayedWorkOrders = BuildReportTable<ReportWorkOrder>(report); 

所以,我的問題:有沒有辦法,我可以設置方法的默認類型,這樣我就不需要指定我每次調用它的方法嗎?

回答

1

你可以添加一個非通用超載:

public static DataTable BuildReportTable(Report report) 
{ 
    return BuildReportTable<ReportWorkOrder>(report); 
} 

這是一個常見的,非常值得尊敬的成語(當然,未使用的類型參數CHAPS我只是一點點,但我會克服它)。

否則,你卡住了;參數必須流動,不必介意如何。

+0

我可以忍受這一點。這在調用方法時保持乾淨,這是我的目標。謝謝! –

+1

我不是未使用的類型參數的粉絲,但更好地隱藏在這裏,而不是在通話時間。 –

+0

是的。眼不見,心不煩。 –