从同一(通用)类中调用索引器

发布于 2024-09-18 07:01:29 字数 665 浏览 10 评论 0原文

public class MyClass<T>
{
        public T this[int index]
        {
            get
            {
                ...
            }
            set
            {
                ...
            }
        }

        public void MyMethod<T>()
        {   
             int middleIndex = ...;              
             T value = this[middleIndex ];     
             ...             
        }           
}

由于 MyMethod() 中的语句,代码将无法编译。还有另一种调用索引器的方法吗?

编辑:修改了 MyMethod()

Edit2:编译错误

Error    6    Cannot implicitly convert type 'T [C:\MyClass.cs]' to 'T [C:\MyClass.cs]'

谢谢。

public class MyClass<T>
{
        public T this[int index]
        {
            get
            {
                ...
            }
            set
            {
                ...
            }
        }

        public void MyMethod<T>()
        {   
             int middleIndex = ...;              
             T value = this[middleIndex ];     
             ...             
        }           
}

The code won't compile because of the statement in MyMethod(). Is there another way of calling the indexer ?

Edit: Modified MyMethod()

Edit2: Compilation error

Error    6    Cannot implicitly convert type 'T [C:\MyClass.cs]' to 'T [C:\MyClass.cs]'

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

桃扇骨 2024-09-25 07:01:30

这对我来说效果很好:

public class MyClass<T>
{
    List<T> _items = new List<T>();

    public T this[int index]
    {
        get
        {
            return _items[index];
        }
    }

    public void MyMethod()
    {
        T value = this[2];
    }
}

This works fine for me:

public class MyClass<T>
{
    List<T> _items = new List<T>();

    public T this[int index]
    {
        get
        {
            return _items[index];
        }
    }

    public void MyMethod()
    {
        T value = this[2];
    }
}
感性 2024-09-25 07:01:30

调用索引器是可以的,但是它不知道你想要哪个索引。如果将索引设置为 MyMethod 的参数,它将正常工作。

如果您尝试获取当前索引或其他内容,那么您需要存储一个私有变量,将其连接到索引器中并访问它。

您编辑的代码编译得很好...

public class MyClass<T>
{
        public T this[int index]
        {
            get
            {
                ...
            }
            set
            {
                ...
            }
        }

        public void MyMethod()
        {   
             int middleIndex = ...;              
             T value = this[middleIndex ];     
             ...             
        }           
}

Calling the indexer is fine, but it doesn't know which index you want. If you make index a parameter of MyMethod it will work fine.

If you're trying to get the current index or something then you need to store a private variable, wire it up in your indexer and access that.

Your edited code compiles fine...

public class MyClass<T>
{
        public T this[int index]
        {
            get
            {
                ...
            }
            set
            {
                ...
            }
        }

        public void MyMethod()
        {   
             int middleIndex = ...;              
             T value = this[middleIndex ];     
             ...             
        }           
}
往事风中埋 2024-09-25 07:01:30

您的违规代码在这里:

public void MyMethod<T>()

您的类 MyClass 已经有一个泛型类型参数 T,因此 MyMethod 上的泛型 是不必要的

Your offending code is here:

public void MyMethod<T>()

Your class MyClass<T> already has a generic type parameter T, so the generic <T> on MyMethod is unnecessary

左耳近心 2024-09-25 07:01:30

您没有将索引值传递到方法 MyMethod 中 - 您可以发布更多代码吗?看起来好像少了点什么……

you're not passing in a value for the index into the method MyMethod - can you post a little more code? It looks like something is missing...

落日海湾 2024-09-25 07:01:29

对我来说效果很好:

public class MyClass<T>
{
    public T this[int index]
    {
        get
        {
            return default(T);
        }
        set
        {
        }
    }

    public void MyMethod(int index)
    {                 
         T value = this[index];     
    }           
}

诚然,我必须将 index 参数引入 MyMethod 中,但我假设您想从某个地方...如果这不是您的意思,请澄清。

Works fine for me:

public class MyClass<T>
{
    public T this[int index]
    {
        get
        {
            return default(T);
        }
        set
        {
        }
    }

    public void MyMethod(int index)
    {                 
         T value = this[index];     
    }           
}

Admittedly I had to introduce the index parameter into MyMethod, but I'm assuming you were wanting to get the index from somewhere... if that's not what you meant, please clarify.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文