2009-07-01 23 views
3

我在寫一個函數,它是從一種類型的對象到另一種類型的映射器。作爲Map方法的參數傳入的對象應具有字符串索引器,以便在對象中查找適當的值(或不)。我真的不在乎映射器是否獲得Dictionary,DataRow,DataReader等。C#:需要方法參數的索引器

有沒有一種方法可以指定傳遞給方法的參數應該實現字符串索引器?我找不到像這樣的東西。

如果不可能,我會使用反射來將類型轉換爲可用的類型,但我想知道是否有正確的方法來處理這個問題。

回答

5

您可以創建這樣一個接口:

interface IFoo 
{ 
    String this[Int32 index] { get; set; } 
} 

實現這個接口將必須實現一個字符串索引,如果參數的方法的類型是IFoo就可以知道,這將所有類型有一個索引器。

6

不,你不能這樣做。您可以使用像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]); 
} 

(感謝邁克爾·梅多斯這個想法充實到的例子。謝謝!)

+0

真是個好主意! – 2009-07-01 13:19:58

0

除非你能做出的所有對象(或類分別爲)你想傳遞給映射器實現一個接口,定義這樣一個索引器,你將需要使用反射。

0

會的接口不能在這種情況下幫助:

interface IImplementMe { 
    string this[int index] 
    { 
     get; 
     set; 
    } 
} 

只是要求該參數實現接口

相關問題