C# 重载具有IndexerName属性的运算符

C# 重载具有IndexerName属性的运算符,c#,overloading,indexer,C#,Overloading,Indexer,我想知道在C#中是否允许为具有相同语义的重载索引器提供定义相同名称的IndexerName属性。例如,假设您有一个用于未知大小矩阵的包装器类,它定义了两个索引器,一个用于Int32,另一个用于Int64数组访问: using System.Runtime.CompilerServices; public class Matrix { private double[,] content; [IndexerName("Cells")] public double this

我想知道在C#中是否允许为具有相同语义的重载索引器提供定义相同名称的
IndexerName
属性。例如,假设您有一个用于未知大小矩阵的包装器类,它定义了两个索引器,一个用于
Int32
,另一个用于
Int64
数组访问:

using System.Runtime.CompilerServices;

public class Matrix
{
    private double[,] content;

    [IndexerName("Cells")]
    public double this[int row, int column]
    {
        get { return this.content[row, column]; }
        set { this.content[row, column] = value; }
    }

    [IndexerName("Cells")]
    public double this[long row, long column]
    {
        get { return this.content[row, column]; }
        set { this.content[row, column] = value; }
    }
}

所以很明显,索引器在语义上没有区别,但在参数上有区别。代码不会编译,因为现在,
矩阵
类型已经包含了“Cells”的定义。在这种情况下使用
IndexerName
属性是否有效,或者我是否对该属性有错误的理解?

这确实是编译
IndexerName
是对编译器编写者的提示,附带在文档中提到。它实际上什么都不做。C#也不使用它。@SLaks你完全正确。在我的实际代码中,索引器名称与我通过将其缩小到一个最小的示例删除的类的一个成员一致。请明确您正试图解决的问题。展示上下文,你希望如何使用这个属性,为什么你认为它会或应该解决这个问题,并清楚地解释它以什么方式对你不起作用
IndexerName
是对编译器编写者的提示,附带在文档中提到。它实际上什么都不做。C#也不使用它。@SLaks你完全正确。在我的实际代码中,索引器名称与我通过将其缩小到一个最小的示例删除的类的一个成员一致。请明确您正试图解决的问题。展示上下文,你希望如何使用这个属性,为什么你认为它会或应该解决这个问题,并清楚地解释它以什么方式不适合你。