C#索引器必须至少有一个参数

时间:2014-07-22 03:37:01

标签: c#

我继承了一些代码,当我尝试运行代码时,我收到了上述错误消息。以下是代码:

using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace Scripting
{
      [CompilerGenerated]
      [Guid("C7C3F5A0-88A3-11D0-ABCB-00A0C90FFFC0")]    
      [TypeIdentifier]    
      [ComImport]    
      public interface IDrive    
      {   
           [DispId(0)]    
           [IndexerName("Path")]    
           string this[] { [DispId(0)] get; } //The error is here//    

           [DispId(10009)]
           int SerialNumber { [DispId(10009)] get; }

           [DispId(10007)]
           string VolumeName { [DispId(10007)] get; [DispId(10007)] set; }

           [SpecialName]
           [MethodImpl(MethodCodeType = MethodCodeType.Runtime)]
           void _VtblGap1_7();

           [SpecialName]
           [MethodImpl(MethodCodeType = MethodCodeType.Runtime)]
           void _VtblGap2_1();
      }
}

我是C#的新手,想知道缺少什么参数。

我无法询问原始编码员。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

如错误所示,"索引器必须至少有一个参数"。

因此您需要向索引器添加一个参数,例如

string this[int index] { [DispId(0)] get; }

如果您考虑一下,当您使用索引器时 提供一个整数作为参数。

e.g。

string path = myIDrive[0]; // Use the integer parameter to access the element

var wut = myIDrive[?]; // without any parameter, how would you get the Path data?

答案 1 :(得分:2)

string this[] { [DispId(0)] get; }

错误显示您缺少参数。

string this[object myIndexerParameter] 
{ 
    get 
    { 
         // return some value based on the parameter passed.  
    }
}

然后你这样称呼它:var something = myIDriveInstance[myIndexValue];

http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx

这与使List<T>允许传递项目索引的内容基本相同;因此名称为indexer