C#中的非整数索引索引器属性

Ian*_*oyd 2 c# properties indexed-properties

我想在C#中有一个索引属性:

public Boolean IsSelected[Guid personGuid]
{
   get {
      Person person = GetPersonByGuid(personGuid);
      return person.IsSelected;
   }
   set {
      Person person = GetPersonByGuid(personGuid);
      person.IsSelected = value;
   }
}
public Boolean IsApproved[Guid personGuid]
{
   get {
      Person person = GetPersonByGuid(personGuid);
      return person.IsApproved;
   }
   set {
      Person person = GetPersonByGuid(personGuid);
      person.IsApproved= value;
   }
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio抱怨非整数索引器语法:

我知道.NET支持非整数索引器.


在另一种语言中,我会写:

private
   function GetIsSelected(ApproverGUID: TGUID): Boolean;
   procedure SetIsSelected(ApproverGUID: TGUID; Value: Boolean);
   function GetIsApproved(ApproverGUID: TGUID): Boolean;
   procedure SetIsApproved(ApproverGUID: TGUID; Value: Boolean);
public
   property IsSelected[ApproverGuid: TGUID]:Boolean read GetIsSelected write SetIsSelected;
   property IsApproved[ApproverGuid: TGUID]:Boolean read GetIsApproved write SetIsApproved;
end;
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 7

你的语法不正确:

public Boolean this[Guid personGuid]
{
   get {
      Person person = GetPersonByGuid(personGuid);
      return person.IsSelected;
   }
   set {
      Person person = GetPersonByGuid(personGuid);
      person.IsSelected = value;
   }
}
Run Code Online (Sandbox Code Playgroud)

使用this关键字声明索引器- 您不能使用自己的名称.

使用索引器(C#编程指南):

要在类或结构上声明索引器,请使用this关键字


另外,只有一个索引器可以接受一个类型 - 这是C#索引器语法的限制(可能是IL限制,不确定).


Mat*_*and 5

索引器仅适用于this关键字.看到这里.

this关键字用于定义索引器.