使用下面的代码我得到以下错误,使用的方法记录为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);
答案 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建议。
此外,
<
而不是<=
。目前它将尝试访问超出列表末尾的一个项目,并将抛出索引超出范围异常。答案 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;
}