为了账号安全,请及时绑定邮箱和手机立即绑定

类索引器设计以访问类中的所有数组

类索引器设计以访问类中的所有数组

C#
饮歌长啸 2022-01-09 16:14:39
我有一个需要存储值列表的场景,例如:id、姓名、部门、手机号码等我目前使用的方法是存储在 DataTable 中,通过行号访问并进行修改。有没有办法可以创建一个包含所有这些属性并通过索引器访问的类?像下面这样的东西class Person{  public int[] id{get;set;}  public string[] Name{get; set;}  //your suggestion for indexer is required here  public <some type> this[int index]  {   //get/set logic to retrieve/modify a users input ->so that the following is achieved   //some thing like Person P=new Person(); now I should be able to do modifications like P[0].Name="New Name" or should retrieve data like P[0].Name,P[0].Id could be done  }    }注意:所有数组都将具有相同的长度。
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超13个赞

您可以使用另一个具有 Person 列表和返回 person 实例的索引器的类。


public class Program

{

    public static void Main()

    {

      Persons pp=new Persons();

      Person p=new Person() { id=1, Name="test"};

      Person p1=new Person() { id=2, Name="test1"};

      pp.PersonsList.Add(p);

      pp.PersonsList.Add(p1);


      pp[1]=new Person(){id=3,Name="tye"};

      Console.WriteLine(pp[1].Name);

   }

 }



 class Person

 {


  public int id {get;set;}

  public string   Name {get; set;}


 }


 class Persons

 {

   public Persons()

   {

       PersonsList=new List<Person>();

   }

   public List<Person> PersonsList {get;set;}

   public Person this[int index]

   {

     get {  return PersonsList[index];  }

     set { 

         PersonsList[index].id=value.id;

         PersonsList[index].Name=value.Name;

         }

   }

 }


查看完整回答
反对 回复 2022-01-09
?
达令说

TA贡献1821条经验 获得超6个赞

您可以返回一个中间类型。但是我不建议这样做。您的“并行数组”方法通常表示缺少类型,并被视为代码异味。我建议您创建一个具有 Id 和 name 属性的类(或者可能是一个严格的,具体取决于您的用例)。并将该类的实例存储在数组或其他集合类型中。


如果你采用中间方法,你可以做这样的事情


struct PersonEntry

{

    private readonly Person _person;

    private readonly int _index;


    public PersonEntry(Person person, int index)

    {

        _person = person;

        _index = index;

    }


    public int Id

    {

        get => _person.id[ _index];

        set => _person.id[ _index] = value;

    }


    public int Name

    {

        get => _person.Name[ _index];

        set => _person.Name[ _index] = value;

    }

}


PersonEntry this[int index]

{

    get => new PersonEntry(this, index);

}

使用这种方法,您可以更改名称和 ID。


我推荐的解决方案是:


class Person

{

    public int Id {get; set;}

    public string Name {get; set;}

}


Person[] persons;


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 220 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号