2012-05-03 2 views
4

Как я могу передать словарь методу, который получает словарь?Как передать словарь <string, string> в словарь <объект, объект> метод?

Dictionary<string,string> dic = new Dictionary<string,string>(); 

//Call 
MyMethod(dic); 

public void MyMethod(Dictionary<object, object> dObject){ 
    ......... 
} 
+0

точная копия http://stackoverflow.com/questions/4734280/how-to-pass-dictionarystring-string-object-in-some-method – emd

+0

Это зависит от контекста. Можете ли вы сделать свой метод общим? Можете ли вы поместить свой метод в интерфейс? У вас могут быть разные решения. Пример, который вы предоставили, именно то, что вам нужно? –

ответ

8

Вы не можете передать его как есть, но вы можете передать копию:

var copy = dict.ToDictionary(p => (object)p.Key, p => (object)p.Value); 

Это часто является хорошей идеей, чтобы сделать вашу программу API принимать интерфейс, а не класс, как это:

public void MyMethod(IDictionary<object, object> dObject) // <== Notice the "I" 

Это небольшое изменение позволяет передавать словари других видов, такие как SortedList<K,T> вашего API.

1

Если вы хотите передать словарь для чтения только для целей, то вы можете использовать Linq:

MyMethod(dic.ToDictionary(x => (object)x.Key, x => (object)x.Value)); 

Ваш текущий Подход не работает из-за типобезопасных ограничений:

public void MyMethod(Dictionary<object, object> dObject){ 
    dObject[1] = 2; // the problem is here, as the strings in your sample are expected 
} 
Смежные вопросы