【问题标题】:String Indexer for List of Classes类列表的字符串索引器
【发布时间】:2021-08-11 08:21:05
【问题描述】:

我在下面创建了一个类

 public class Program_TFT
{     
    public string ProgramName;
    public int NumberOfProjects;
    public List<Project> Projects = new List<Project>();        
}

我用这个类创建了一个列表

public static List<Program_TFT> Programs = new List<Program_TFT>();

我需要能够使用字符串索引器而不是整数来调用列表元素。 这样就可以了

 Programs[Programs.FindIndex(x => x.ProgramName == "Prog_1")]

但不是那样,我想创建一个像这样的直接字符串索引器

 Programs["Prog_1"]

我能做什么?谢谢

【问题讨论】:

  • 我会用字符串键更改字典中的列表。
  • 您可以使用Programs.Single(p =&gt; p.Name == "Prog_1"),而不是Programs[Programs.FindIndex()]]。但是,是的,您可能要考虑使用 Kevin 建议的字典。或者,您可以编写自己的类 extends List&lt;Program_TFT&gt;
  • 这似乎是目前的解决方案,不过需要更改大量代码,我想知道是否还有其他方法可以做到这一点。谢谢凯文·史密斯
  • 我会尝试凯文建议的解决方案。谢谢41686d6564

标签: c# string list indexing


【解决方案1】:

而不是创建程序列表:

public static List<Program_TFT> Programs = new List<Program_TFT>();

创建一个以 ProgramName 为键的程序字典:

public static Dictionary<string, Program_TFT> Programs = new Dictionary<string, Program_TFT>();

如果您已经在某处拥有程序列表,则可以使用.ToDictionary 将其直接转换为字典:

Dictionary<string, Program_TFT> Programs = list.ToDictionary(x=>x.ProgramName);

【讨论】:

    【解决方案2】:

    您可以使用Dictionary&lt;string, Program_TFT&gt; 作为其他答案的建议,或者这样做

    Programs.SingleOrDefault(x => x.ProgramName == "Prog_1")
    

    上面的行假设最多有一个同名的程序,如果超过一个就会抛出错误,如果没有则返回 null。 您需要自己管理重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-14
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 2021-10-29
      • 2012-06-06
      相关资源
      最近更新 更多