2013-09-25 76 views
2

我有一種方法可以選擇最後一個參數。可選參數無法正常工作

public static DataTable GetQueryResult<T>(string connectionString, string queryText, Dictionary<string, T> dicParameters = null) 

當我嘗試調用此方法,如:

DBOperations.GetQueryResult(myConnectionString, myQuery); 

它說沒有重載方法「GetQueryResult」需要兩個參數。

This文檔解釋說,我只能將需要的參數傳遞給這種方法。

問候

+1

@nuke錯了。 'null'可以用作默認參數值。 –

回答

5

您必須明確指定T

DBOperations.GetQueryResult<YourType>(myConnectionString, myQuery); 

當您指定dicParameters,該T是隱式的:

var dicParameters = new Dictionary<string, YourType>(); 
DBOperations.GetQueryResult(myConnectionString, myQuery, dicParameters); 
+0

每個答案都很相似。謝謝!我現在得到了:) – Xelom

2

調用方法時,您可以指定類型

DBOperations.GetQueryResult<Person>(myConnectionString, myQuery); 
2

如果不提供最後一個參數,編譯器無法猜出T是什麼。

嘗試調用你的方法有一個明確的T

DBOperations.GetQueryResult<Something>(myConnectionString, myQuery); 
4

在這種情況下,最好是有過載,而不是默認的參數。

你可以從其他的答案看,如果你使用默認參數,調用者沒有指定,那麼他們就需要在調用指定T的類型:

DBOperations.GetQueryResult<MyType>(myConnectionString, myQuery); 

然而,因爲如果字典爲空(大概是!),字典就不會被使用,那麼當調用者不指定字典時,必須指定一個任意類型來調用該函數是沒有意義的。

所以你應該引入一個重載,它根本沒有字典參數,所以調用者不會有這個問題。

2
change the call from DBOperations.GetQueryResult(myConnectionString, myQuery); 
to e.g DBOperations.GetQueryResult<int>(myConnectionString, myQuery); or DBOperations.GetQueryResult<string>(myConnectionString, myQuery); whatever data type you will be using for dictionary