C#generic indexer不会返回一个字符串

时间:2014-05-22 01:02:32

标签: c# generics return indexer

这是具有通用索引器

的类
 public class IndexThis<T>
{
    T[] MainArr = new T[100];

    public IndexThis(params T[] Arrz)
    {
        for (int i = 0; i < Arrz.Length; i++)
        {
            MainArr[i] = Arrz[i];
        }
    }

    public T this[int index]
    {
        get
        {
            if (MainArr[index] == null) return "myStringHere";  //compile error
            return MainArr[index]; 
        }

        private set { }
    }
}

尝试将其转换为(T)或使用&#34;作为T&#34;仍然给我编译时错误,看来我真的不记得我在这里错过了什么

1 个答案:

答案 0 :(得分:4)

T,因为它目前不受约束,可以是任何东西。索引器需要返回T,调用代码将需要T类型的实例。

我们假设您使用的类型......

var foo = new IndexThis<Giraffe>();

您的索引器现在基本上是:

public Giraffe this[int index]
{
    get
    {
        if (MainArr[index] == null) return "myStringHere";  //compile error
        return MainArr[index]; 
    }
}

这当然没有意义。

如果您需要返回值,请考虑返回default( T )。或者,抛出异常。