gpt4 book ai didi

c# - 如何在 C# 的计算中将 List 的单个元素类型转换为类型 'double'

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:18 24 4
gpt4 key购买 nike

假设我有一个初始化列表:List<double> o

我想执行以下操作:

 int offset = 10;

for (int i = 0; i < o.Count; ++i){
o[i] = ApplyRamp(o[i]-offset)
}

其中 ApplyRamp 定义为:

 public static void ApplyRamp(ref double x)
{
if (x < 0) x = 0;
}

但是代码无法编译。为什么不是 List<double> 的单个元素,即 o[i] , 不被视为类型 double

最佳答案

这里有四个问题:

  • 您必须在参数 和参数上使用ref
  • 表达式 o[i] - offset 被归类为一个而不是一个变量,所以你不能传递它引用
  • 甚至表达式 o[i] 也会被归类为值,因为它是调用索引器的结果。如果 odouble[](即数组而不是列表),则 o[i] 将被归类为变量。
  • 您正在尝试将 void 方法的结果用作赋值运算符的右侧。 void 方法没有结果。

你可以使用:

double temp = o[i] - offset;
ApplyRamp(ref temp);
// Do something with temp?

但无论如何您都不清楚之后要用 temp 做什么。您是否要修改 o?如果是这样,offset 从哪里来?在这种情况下,为什么还要分配给 o[i]

最后,我强烈建议您考虑让您的 ApplyRamp 仅使用常规按值参数并返回结果。这将使它在大多数情况下更容易使用。我很少看到在 void 方法中很好地使用 ref 参数。

所以像这样:

public static double ApplyRamp(double x)
{
return x < 0 ? 0 : x;
}

或者只使用 Math.Max:

public static double ApplyRamp(double x)
{
return Math.Max(x, 0);
}

关于c# - 如何在 C# 的计算中将 List<double> 的单个元素类型转换为类型 'double',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34083014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com