class 索引器设计以访问 class 中的所有数组
class indexer design to access all array in a class
我有一个需要存储值列表的场景,例如:id、姓名、部门、手机号码等
我目前使用的方法是存储在DataTable中,通过行号访问并进行修改。
有没有一种方法可以创建包含所有这些属性并通过索引器访问的 class?
像下面这样的东西
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
}
}
注意:所有数组的长度都相同。
您可以 return 中间类型。但是我不建议这样做。您的 "parallel array" 方法通常表示缺少类型并被视为代码异味。我建议您使用 ID 和名称 属性 创建一个 class(或者可能是一个严格的,具体取决于您的用例)。并将 class 的实例存储在数组或其他集合类型中。
如果你采用中间方法,你可以这样做
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;
您可以使用另一个 class 具有人员列表和 return 人员实例的索引器。
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;
}
}
}
这里是工作代码...Code link
我有一个需要存储值列表的场景,例如:id、姓名、部门、手机号码等
我目前使用的方法是存储在DataTable中,通过行号访问并进行修改。
有没有一种方法可以创建包含所有这些属性并通过索引器访问的 class?
像下面这样的东西
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
}
}
注意:所有数组的长度都相同。
您可以 return 中间类型。但是我不建议这样做。您的 "parallel array" 方法通常表示缺少类型并被视为代码异味。我建议您使用 ID 和名称 属性 创建一个 class(或者可能是一个严格的,具体取决于您的用例)。并将 class 的实例存储在数组或其他集合类型中。
如果你采用中间方法,你可以这样做
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;
您可以使用另一个 class 具有人员列表和 return 人员实例的索引器。
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;
}
}
}
这里是工作代码...Code link