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

时间:2019-02-22 23:05:33

标签: c# object grasshopper

我正在尝试处理输入到Grasshopper中的C#脚本块中的小数列表。对象x接收输入的小数列表,而引用对象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;
  }

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

2 个答案:

答案 0 :(得分: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#代码。

答案 1 :(得分:0)

必须将变量x强制转换为Int32。你不能从物体中减去

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