错误(CS0120):方法需要对象引用

时间:2013-09-22 12:43:44

标签: c# grasshopper

使用下面的代码我得到以下错误,使用的方法记录为here。为什么方法不接受我的字符串列表来创建新图层?

Error (CS0120): An object reference is required for the non-static field, method, or property 'Rhino.DocObjects.Tables.LayerTable.Add(string, System.Drawing.Color)' (line 73)

代码:

  private void RunScript(List<string> x, ref object A)
  {

    for (int i = 0; i <= x.Count;i++)
    {
      Rhino.DocObjects.Tables.LayerTable.Add(x[i], Color.Black);
    }
    A = x;
  }

第73行就是这个:

Rhino.DocObjects.Tables.LayerTable.Add(x[i], Color.Black);

4 个答案:

答案 0 :(得分:2)

我认为您需要将其更改为

Rhino.DocObjects.Tables.LayerTable.Add(x[i], ref Color.Black);

请注意最后一个参数前的ref

编辑

要解决此问题,您可以执行以下操作;

 object ob = Color.Black; //box value
 Rhino.DocObjects.Tables.LayerTable.Add(x[i], ref ob );

答案 1 :(得分:1)

使用ref作为@Tigran建议。

此外,

  • 确保x不为空
  • 确保x中的所有字符串都有效(非空)
  • 在循环中使用<而不是<=。目前它将尝试访问超出列表末尾的一个项目,并将抛出索引超出范围异常。

答案 2 :(得分:1)

documentation中的方法签名是:

public int Add(
    string layerName,
    Color layerColor
);

这不是静态方法。您需要在实际的LayerTable对象上调用它,例如文档中的示例:

partial class Examples
{
    public static Rhino.Commands.Result AddLayer(Rhino.RhinoDoc doc)
    {
        // <snip>
        layer_index = doc.Layers.Add(layer_name, System.Drawing.Color.Black);
        // <snip>
    }
}

在上面的示例中,doc.Layers会返回您呼叫LayerTable的{​​{1}}个对象。

答案 3 :(得分:1)

只需在私有后添加静态。

private static void RunScript(List<string> x, ref object A)
  {

    for (int i = 0; i <= x.Count;i++)
    {
      Rhino.DocObjects.Tables.LayerTable.Add(x[i], Color.Black);
    }
    A = x;
  }