0

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

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

4 回答 4

2

我认为您需要将其更改为

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

注意refbefore last 参数。

编辑

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

 object ob = Color.Black; //box value
 Rhino.DocObjects.Tables.LayerTable.Add(x[i], ref ob );
于 2013-09-22T12:47:41.287 回答
1

按照@Tigran 的建议使用 ref。

还,

  • 确保 x 不为空
  • 确保 x 中的所有字符串都有效(不为空)
  • 使用<而不是<=在你的循环中。就目前而言,它将尝试访问列表末尾之外的一项,并将引发索引超出范围异常。
于 2013-09-22T12:50:10.240 回答
1

文档中的方法签名是:

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您调用的对象Add

于 2013-09-22T12:55:35.660 回答
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;
  }
于 2016-12-09T17:52:10.653 回答