.NET: Как вы получаете тип нулевого объекта?

У меня есть метод с выходным параметром, который пытается сделать преобразование типа. В принципе:

public void GetParameterValue(out object destination)
{
    object paramVal = "I want to return this. could be any type, not just string.";

    destination = null; // default out param to null
    destination = Convert.ChangeType(paramVal, destination.GetType());
}

Проблема в том, что обычно кто-то назвал бы это так:

string output;
GetParameterValue(output);

Это не удастся из-за:

destination.GetType()

пункт назначения пуст, поэтому мы не можем позвонить.GetType() в теме. Мы также не можем позвонить:

typeof(destination)

потому что назначение - это имя переменной, а не имя типа.

Так есть ли способ получить тип объекта с нулевым значением? Я бы подумал, что должен быть способ узнать, к какому типу относится хранилище, без какого-либо назначения.

Просто чтобы дать немного больше информации, я пытаюсь создать вспомогательный метод, который будет получать выходные параметры хранимой процедуры Oracle. Проблема в том, чтоDbParameter.Value имеет тип объекта.

Для разработчиков было бы идеально сделать что-то вроде:

string val = GetParameterValue("parameterName");

Примечательно, что нет приведения типов. На практике вы не знаете lparam «равных», поэтому я пошел с:

string val;
GetParameterValue("parameterName", out val);

И выяснилось, что внутри метода я бы знал тип назначения выходной переменной. Я думаю, это было плохое предположение. В качестве альтернативы я также написал метод:

public T GetParameterValue<T>(string paramName)

Таким образом, разработчики могут сделать:

string val = GetParameterValue<string>("parameterName");

Я нахожу явное «строковое» объявление повторяющимся, тем более что на практике может измениться назначение, если, возможно, свойство объекта и тип данных oracle (например, ORM):

MyObj.SomeProp = GetParameterValue<MyObj.SomeProp.GetType()>("parameterName");

Но опять же, если MyObj.SomeProp равен нулю, то.GetType() звонок не получается. ВМ должна знать типMyObj.SomePropдаже когда его ноль, верно? или как это поймать исключения?

Чтобы частично решить мою собственную проблему, я могу сделать:

MyObj.SomeProp = GetParameterValue<typeof(MyObj).GetField("SomeProp").GetType()>("parameterName");

Идея заключалась в том, чтобы не использовать явное использование типа в нескольких местах, поэтому, если тип данных изменяется, его нужно изменить только в целевом объекте (MyObj.SomeProp) и в БД. Там должен быть лучший путь...

Ответы на вопрос(12)

Ваш ответ на вопрос