【问题标题】:C# - How to overload [][] (two square brakets)C# - 如何重载 [][](两个方括号)
【发布时间】:2016-01-14 18:21:56
【问题描述】:

我想创建我的Matrix class 字段:double[][] _elements, 但我不知道如何为getset 编写属性[][]

【问题讨论】:

    标签: c# properties operators overloading


    【解决方案1】:

    这是您需要的Indexer

    public double this[int x, int y]
    {
        get { return _elements[x][y]; }
        set { _elements[x][y] = value; }
    }
    

    【讨论】:

      【解决方案2】:

      要获得看起来像您需要做的索引属性

      public class YourClass
      {
          private double[][] _elements;
      
          public double[] this[int index]
          {
              get
              {
                  return _elements[index];
              }
              set
              {
                  _elements[index] = value;
              }
          }
      }
      

      这将允许类似的东西

      var instance = new YourClass();
      var d = instance[0][1];
      instance[0][1] = 2.5;
      

      尽管此时您需要谨慎对待索引范围,并且可能应该在另一个属性中公开_element.Length

      【讨论】:

        【解决方案3】:

        为什么不创建一个带有两个参数的索引器?

        public double this[int i, int j]
        {
            get
            {
                return _elements[i][j];
            }
            set
            {
                _elements[i][j] = value;
            }
        }
        

        用法:

        var myValue = myInstance[1, 4];
        

        【讨论】:

          【解决方案4】:

          从这里:https://msdn.microsoft.com/en-us/library/6x16t2tx.aspx

          public double[] this[int i]
          {
              get { return arr [i]; }
              set { arr [i] = value; }
          }
          

          【讨论】:

          • 基于 OP 的 _elements 似乎该属性应该是 double[] 类型。
          • 假设arrdouble[][],返回类型应该是double[]而不是double
          猜你喜欢
          • 1970-01-01
          • 2017-08-15
          • 2010-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-20
          • 2013-03-11
          相关资源
          最近更新 更多