使用object和int类型的操作数解决错误

问题描述 投票:-1回答:2

我正在尝试处理输入到Grasshopper中的C#Script块的小数列表。对象x接收输入的小数列表和ref对象A应该输出解决方案。目前虽然我收到此错误:

1. Error (CS0019): Operator '-' cannot be applied to operands of type 'object' and 'int' (line 59)

private void RunScript(object x, ref object A)
  {
    int intNum = new int();
    intNum = Convert.ToInt32(x);
    A = x - intNum;
  }

我不明白为什么这不起作用,任何见解都会非常有帮助。谢谢!

c# object grasshopper
2个回答
3
投票

如果你想要做的是取一个小数列表并从每个小数中减去一个,改变列表,你这样做:

void MutateList(List<decimal> values)
{
  for(int i = 0; i < values.Count; i += 1)
    values[i] -= 1m;
}

如果你想要做的是取一个小数列表并返回一个不同的列表,其中新列表与旧列表相同,但每个元素都小一个,即:

List<decimal> NewList(List<decimal> values)
{
  return values.Select(v => v - 1m).ToList();
}

如果由于某种原因,您的脚本系统会受到签名的限制:

void RunScript(object input, ref object output)
{
}

然后你做的事与以前完全一样。如果您需要改变列表,请执行以下操作:

void MutateList(List<decimal> values)
{
  for(int i = 0; i < values.Count; i += 1)
    values[i] -= 1m;
}
void RunScript(object input, ref object output)
{
    MutateList((List<decimal>)input);
}

你尽可能地让自己处于合理类型的世界。

同样,如果您需要返回一个新列表:

List<decimal> NewList(List<decimal> values)
{
  return values.Select(v => v - 1m).ToList();
}
void RunScript(object input, ref object output)
{
    output = NewList((List<decimal>)input);
}

保持所有内容尽可能静态输入,并编写合理的,正常的C#代码。只使用一个奇怪的界面,你需要使用一个奇怪的界面。其他地方应该是普通的,静态类型的C#代码。


0
投票

您必须将变量x转换为Int32。你不能从对象中减去

    private void RunScript(object x, ref object A)
    {
        int intNum = new int();
        intNum = Convert.ToInt32(x);
        A = (int) x - intNum;
    }
© www.soinside.com 2019 - 2024. All rights reserved.