Приведение ссылки на объект в C # - PullRequest
2 голосов
/ 18 марта 2011

Если у меня есть функция, которая принимает ссылку на объект. Как преобразовать параметр, чтобы избежать несоответствия типов?

Dictionary<string, string> mySettings = new Dictionary<string, string>();
.
.
saveSettings(ref mySettings);
.
.
void saveSettings(ref object)
{
}

При вызове saveSettings появляется следующее сообщение об ошибке:

не может преобразовать 'ref Dictionary' в 'ref object'

Я не ищу обходного пути, я сделал это, я хотел бы знать, возможен ли такой прямой подход.

Ответы [ 5 ]

3 голосов
/ 18 марта 2011

Если в параметрах сохранения используются несколько типов, почему бы не использовать универсальный вместо этого? Esp, если они имеют общий интерфейс.

void saveSettings<T>(T obj);
2 голосов
/ 18 марта 2011
var objectMySettings = mySettings as object;
if (objectMySettings != null)
    saveSettings(ref objectMySettings);
1 голос
/ 18 марта 2011
void saveSettings(ref object)

Определение saveSettings искажено.Вам нужен идентификатор после «ref object».Но вместо этого я сделаю «объект ссылки» словарём.

0 голосов
/ 18 марта 2011

Примерно так:

static void Main()
{

   Dictionary<string, string> mySettings = new Dictionary<string, string>();
   object o = mySettings;
   SaveSettings(ref o);
   // o now has an item.
}

static void SaveSettings(ref object o)
{
    var d = o as Dictionary<string, string>;
    d.Add("Some", "String");
}

РЕДАКТИРОВАТЬ Некоторые выходные данные отладки. enter image description here

0 голосов
/ 18 марта 2011

Сделайте так:

 protected void Button1_Click(object sender, EventArgs e)
{
    Dictionary<string, string> mySettings = new Dictionary<string, string>();

    saveSettings(mySettings);
}

void saveSettings( Dictionary<string, string> Settings)
{
}
...