Что в этом варианте не нравится.
Подавляющее большинство использований этой функции — либо string, либо int.
Хочется вставить перед try что-то в этом духе:
if (T это string) {ParamValue=paramValue; return}
if (T это int) return int.TryParse(paramValue, out ParamValue);
Но не могу это оформить с точки зрения синтаксиса. Как это можно сделать?
P.S. Вариант сделать 3 отдельные функции понимаю, но хочется все-таки одну (к тому же на нее уже код завязан).
Здравствуйте, aleyush, Вы писали:
A>Вопрос скорее просто по синтаксису, но что-то туплю. A>Делаю метод для чтения параметров из строки запроса ASP.NET. Такой вариант работает: A>
A> protected bool TryLoadRequestParam<T>(string ParamName, out T ParamValue)
A> {
skiped
A> return true;
A> }
A>
A>Хочется вставить перед try что-то в этом духе: A>
A>if (T это string) {ParamValue=paramValue; return}
A>
можно так
для ref-type
if (typeof(string).Equals(typeof(T))) { .... }
для val-type сработает is.
if (t is int) { ... }
Re[2]: Как сделать проверку типов в generic-методе
Здравствуйте, aleyush, Вы писали:
A>>>Хочется вставить перед try что-то в этом духе: В>>if (t is int) { ... }
A>До этого я еще дошел. Но вот то, что после if, написать нее могу — получаю ошибку компилятора о невозможности приведения типа...
Так можно к примеру.
ParamValue = ((T)((object)int.Parse(paramValue )));
,где ParamValue объявлена как T ParamValue;
Hello, "aleyush" > Вопрос скорее просто по синтаксису, но что-то туплю. > P.S. Вариант сделать 3 отдельные функции понимаю, но хочется все-таки одну (к тому же на нее уже код завязан).
Если не нравятся три отдельных функции то, можно сделать четыре. Будет примерно так:
protected bool TryLoadRequestParam(string paramName, out int paramValue)
{
return TryLoadRequestParamImpl(paramName, delegate (string arg) { return int.Parse(arg); }, out paramValue);
}
protected bool TryLoadRequestParam(string paramName, out string paramValue)
{
return TryLoadRequestParamImpl(paramName, delegate (string arg) { return arg; }, out paramValue);
}
protected bool TryLoadRequestParam<T>(string ParamName, out T ParamValue)
{
return TryLoadRequestParamImpl(paramName, delegate (string arg) { return Convert.ConvertTo(typeof(T), arg); }, out paramValue);
}
private bool TryLoadRequestParamImpl<T>(string ParamName, Converter<string, T> converter, out T ParamValue)
{
...
}
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Как сделать проверку типов в generic-методе