【发布时间】:2020-05-28 08:14:16
【问题描述】:
我希望能够修改泛型类型 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[] 等
处理数组也很棘手。
我也尝试过正常的 for 循环,如下所示:
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 参数的修改版本。
编辑
请注意,ModifyValue() 只是一个虚拟示例。 “param”必须是通用的!
编辑 2
也许我可以围绕这些行做点什么(虽然不知道怎么做):
public static T ConvertParam(T param)
{
T ret = param.ToList().ConvertAll(i => i = new T() { ModifyValue(Convert.ToDouble(i)) });
return ret;
}
【问题讨论】:
-
ConvertParam应该有泛型类型参数T,否则ist 声明无效 -
那么根据
ModifyValue所做的事情,您的value是否总是double? -
你打算怎么打电话给
ConvertParam?为什么你认为它应该是通用的? -
你为什么要将输入转换为 double 只将其转换为
UInt64? -
@stackMeUp 如果你的值总是双倍的,你为什么需要泛型?