Я sh, чтобы иметь возможность изменить значение некоторого параметра generi c типа T, и я пытаюсь сделать это с помощью LINQ, но не могу понять.
Вот что у меня есть:
public static T ConvertParam(T param)
{
T val = param.Select(i => { i = (T)ModifyValue(Convert.ToDouble(i)); });
return val;
}
public static UInt64 ModifyValue(double value)
{
UInt64 result = (UInt64)(value) * 3 + 1;
return result;
}
В этом случае проблема заключается в значении, возвращаемом «ModifyValue ()», которое необходимо привести к тому, что содержит параметр T, но я не уверен, как это сделать. T может быть int, uint, int [], uint [], et c.
Обработка массивов также сложна.
Я также пробовал использовать обычный для l oop, как показано ниже:
public static T ConvertParam(T param)
{
List<UInt64> output = new List<UInt64>();
foreach (var v in param)
{
output.Add(ModifyValue(Convert.ToDouble(v));
}
return output.ToArray();
}
Проблема здесь снова в том, что возвращаемое значение может быть или не быть массивом. Он должен просто вернуть измененную версию параметра T.
EDIT
Обратите внимание, что ModifyValue () - это просто фиктивный пример. "param" ДОЛЖЕН быть generi c!
EDIT 2
Возможно, я мог бы что-то сделать вокруг этих строк (хотя не знаю, как это сделать):
public static T ConvertParam(T param)
{
T ret = param.ToList().ConvertAll(i => i = new T() { ModifyValue(Convert.ToDouble(i)) });
return ret;
}