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

C# 错误(CS0120):方法需要对象引用,c#,grasshopper,C#,Grasshopper,使用下面的代码,我得到以下错误,所使用的方法被记录在案。为什么该方法不接受我的字符串列表来创建新层 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) 代码: 我想你需要把它改成 Rhino.DocO

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

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)
代码:


我想你需要把它改成

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 );

我想你需要把它改成

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 );

按照@Tigran的建议使用ref

而且

  • 确保x不为null
  • 确保x中的所有字符串都有效(非空)

  • 使用
    按照@Tigran的建议使用ref

    而且

    • 确保x不为null
    • 确保x中的所有字符串都有效(非空)

    • 使用中的方法签名是:

      这不是一种静态方法。您需要在实际的
      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>
          }
      }
      
      部分类示例
      {
      公共静态Rhino.Commands.Result AddLayer(Rhino.RhinoDoc)
      {
      // 
      图层索引=doc.Layers.Add(图层名称、系统、绘图、颜色、黑色);
      // 
      }
      }
      

      在上面的示例中,
      doc.Layers
      返回一个调用
      Add
      LayerTable
      对象。

      中的方法签名是:

      这不是一种静态方法。您需要在实际的
      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>
          }
      }
      
      部分类示例
      {
      公共静态Rhino.Commands.Result AddLayer(Rhino.RhinoDoc)
      {
      // 
      图层索引=doc.Layers.Add(图层名称、系统、绘图、颜色、黑色);
      // 
      }
      }
      

      在上面的示例中,
      doc.Layers
      返回一个
      LayerTable
      对象,您可以将其称为
      Add
      打开。

      只需在private之后添加static即可

      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;
        }
      
      private static void RunScript(列表x,参考对象A)
      {
      
      对于(inti=0;i只需在private之后添加static

      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;
        }
      
      private static void RunScript(列表x,参考对象A)
      {
      
      对于(int i=0;我非常感谢这是我得到的一组新错误:`0.Error(CS0206):属性、索引器或动态成员访问不能作为out或ref参数传递(第72行)1.Error(CS1502):与'Rhino.DocObjects.Tables.LayerTable.Add(string、System.Drawing.Color)最匹配的重载方法'有一些无效参数(第72行)2.错误(CS1615):参数2不应与'ref'关键字一起传递(第72行)`非常感谢这是我得到的一组新错误:`0.错误(CS0206):属性、索引器或动态成员访问不能作为out或ref参数传递(第72行)1.错误(CS1502):与“Rhino.DocObjects.Tables.LayerTable.Add(string,System.Drawing.Color)”匹配的最佳重载方法具有一些无效参数(第72行)。2.错误(CS1615):参数2不应与“ref”关键字一起传递(第72行)`非常感谢,我检查了所有这些,但仍然有我粘贴在@Tigran's Comments中的错误非常感谢,我检查了所有这些,但仍然有我粘贴在@Tigran's Comments中的错误非常感谢T.C.但是我如何将
      layer_index
      与我定义为输入的字符串x列表相关联呢?我已经尝试了以下方法ng:
      layer_index=doc.Layers.Add(layer_name,System.Drawing.Color.Black);for(int i=0;i
      但出现了错误:
      名称“layer\u index”在当前上下文中不存在
      layer\u index
      layer\u name
      是它们的代码示例中使用的变量,与您的代码无关,您不应该复制它们。关键是您必须在一些
      LayerTable
      上调用
      添加
      例如,如果您有一个
      RhinoDoc
      对象(如示例中的
      doc
      ),那么您将调用类似
      doc.Layers.Add(x[i],Color.Black)的东西
      。但是你在这里尝试做的事情没有太多的上下文。非常感谢T.C.但是我如何将
      层索引
      与我定义为输入的字符串x的列表联系起来呢?我尝试了以下操作:
      层索引=doc.Layers.Add(层名称,System.Drawing.Color.Black);for(int I=0;I
      但出现了错误:
      名称“layer\u index”在当前上下文中不存在
      layer\u index
      layer\u name
      是它们的代码示例中使用的变量,与您的代码无关,您不应该复制它们。关键是您必须在一些
      LayerTable
      上调用
      添加
      例如,如果您有一个
      RhinoDoc
      对象(如本例中的
      doc
      ),那么您可以调用类似
      doc.Layers.Add(x[i],Color.Black)
      。但是您在这里尝试的操作没有太多上下文。