.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
) и в БД. Там должен быть лучший путь...