在从集合C#继承的类上应用索引器

时间:2011-12-06 09:49:20

标签: c#

我有一个类,它继承自实现索引器的列表列表

public class TwoDList<T>: List<List<T>>
{
  public T this[int row, int column]
        {
            get; 
            set ;
        }
}

关于新建它并像这样使用它:

 TwoDCollection<int> target = new TwoDCollection<int>();
   var linearSequecValue = target[0, 2];

但是我得到一个编译时错误“没有方法重载'这个'需要2个参数”

5 个答案:

答案 0 :(得分:2)

它工作正常(假设您提供getset机构);是这样的:

  • TwoDList<T> / TwoDCollection<T>
  • 之间的拼写错误
  • 您实际上是在某处输入List<T> / IList<T>吗?

我还应该说:从List<T> 继承来提供功能通常是个坏主意; 封装会更好。

工作示例:

class Program
{    
    static void Main()
    {
        TwoDList<int> target = new TwoDList<int>();
        var linearSequecValue = target[0, 2];
    }
}

public class TwoDList<T> : List<List<T>>
{
    public T this[int row, int column]
    {
        get { return this[row][column]; }
        set { this[row][column] = value; }
    }
}

答案 1 :(得分:1)

我认为你应该使用:

TwoDList<int> target = new TwoDList<int>();
var linearSequecValue = target[0, 2];

这是我的尝试:

    public int Test()
    {
        TwoDList<int> target = new TwoDList<int>();
        target.Add(new List<int>(new int[] {3,5,6}));
        target.Add(new List<int>(new int[] {2,1,8}));
        target.Add(new List<int>(new int[] {1,3,4}));
        return target[1, 2];
    }

public class TwoDList<T> : List<List<T>>
{
    public T this[int row, int column]
    {
        get { return this[row][column]; }
        set { this[row][column] = value; }
    }
}

答案 2 :(得分:0)

试试这个

TwoDList<int> target = new TwoDList<int>(); 
   var linearSequecValue = target[0, 2]; 

你可以试试这个

public class TwoDList<T> : List<List<T>> 
{ 
    public T this[int row, int column] 
    { 
         get { return this[row][column]; } 
         set { this[row][column] = value; } 
    } 
} 

而不是

public class TwoDList<T>: List<List<T>>   
{   
  public T this[int row, int column]   
        {   
            get;    
            set ;   
        }   
}   

答案 3 :(得分:0)

public class TwoDList<T> : List<List<T>>
{
    public T this[int row, int column]
    {
      get { return (this[row])[column]; }
    }
}

TwoDList<int> target = new TwoDList<int>();
var linearSequecValue = target[0, 2];

工作正常

TwoDCollection的定义是什么?

答案 4 :(得分:0)

您的indexer中有derived type,但应该有custom implementation in your indexer body(for,get; set;,因为您已经继承了Lists<> use like this }

对于现在,而不更改代码,您可以var linearSequecValue = target[0][2];

{{1}}

希望这有帮助!