我在寫一個函數,它是從一種類型的對象到另一種類型的映射器。作爲Map方法的參數傳入的對象應具有字符串索引器,以便在對象中查找適當的值(或不)。我真的不在乎映射器是否獲得Dictionary,DataRow,DataReader等。C#:需要方法參數的索引器
有沒有一種方法可以指定傳遞給方法的參數應該實現字符串索引器?我找不到像這樣的東西。
如果不可能,我會使用反射來將類型轉換爲可用的類型,但我想知道是否有正確的方法來處理這個問題。
我在寫一個函數,它是從一種類型的對象到另一種類型的映射器。作爲Map方法的參數傳入的對象應具有字符串索引器,以便在對象中查找適當的值(或不)。我真的不在乎映射器是否獲得Dictionary,DataRow,DataReader等。C#:需要方法參數的索引器
有沒有一種方法可以指定傳遞給方法的參數應該實現字符串索引器?我找不到像這樣的東西。
如果不可能,我會使用反射來將類型轉換爲可用的類型,但我想知道是否有正確的方法來處理這個問題。
您可以創建這樣一個接口:
interface IFoo
{
String this[Int32 index] { get; set; }
}
實現這個接口將必須實現一個字符串索引,如果參數的方法的類型是IFoo
就可以知道,這將所有類型有一個索引器。
不,你不能這樣做。您可以使用像Andrew這樣的界面,或者您可以傳入檢索索引值的Func<T, string>
。
public void ConsumeIndexedFunction<T>(Func<string, T> something)
{
var foo = something("bar");
// do something with foo
}
public void TestMethod(
Dictionary<string, object> myDictionary,
DataTable myDataTable,
IDataReader myDataReader)
{
ConsumeIndexedFunction(x => myDictionary[x]);
ConsumeIndexedFunction(x => myDataTable.Rows[0][x]);
ConsumeIndexedFunction(x => myDataReader[x]);
}
(感謝邁克爾·梅多斯這個想法充實到的例子。謝謝!)
除非你能做出的所有對象(或類分別爲)你想傳遞給映射器實現一個接口,定義這樣一個索引器,你將需要使用反射。
會的接口不能在這種情況下幫助:
interface IImplementMe {
string this[int index]
{
get;
set;
}
}
只是要求該參數實現接口
真是個好主意! – 2009-07-01 13:19:58