[英]Make an IEnumerable from class
我有两个类“Word.cs”和“TrainerFile.cs”。 TrainerFile包含5个不同的List<Word>
的集合,Word包含2个字符串Lang1和Lang2。 我需要的是TrainerFile中所有单词的List或enum,这样我就可以随机列出所述TrainerFile的单词。 我不知道如何访问所有单词。 这是两个类:
public class Word
{
public string Lang1 { get; set; }
public string Lang2 { get; set; }
public Word()
{
this.Lang1 = "";
this.Lang2 = "";
}
public Word(string lang1, string lang2)
{
this.Lang1 = lang1;
this.Lang2 = lang2;
}
}
public class TrainerFile
{
public List<Word> FolderInitial { get; set; }
public List<Word> Folder1 { get; set; }
public List<Word> Folder2 { get; set; }
public List<Word> Folder3 { get; set; }
public List<Word> FolderFinal { get; set; }
public TrainerFile()
{
this.FolderInitial = new List<Word>();
this.Folder1 = new List<Word>();
this.Folder2 = new List<Word>();
this.Folder3 = new List<Word>();
this.FolderFinal = new List<Word>();
}
public TrainerFile(List<Word> listInitial, List<Word> list1, List<Word> list2, List<Word> list3, List<Word> listFinal)
{
this.FolderInitial = listInitial;
this.Folder1 = list1;
this.Folder2 = list2;
this.Folder3 = list3;
this.FolderFinal = listFinal;
}
}
使用linq的Concat
:
var result = FolderInitial.Concat(Folder1)
.Concat(Folder2)
.Concat(Folder3)
.Concat(FolderFinal);
Concat
使用Union
并覆盖Word
类的Equals
和GetHashCode
方法,以便通过类的属性进行比较。 Union
重载的 IEqualityComparer
此外,从C#6.0开始,您可以:而不是使用默认构造函数:
public class TrainerFile
{
public List<Word> FolderInitial { get; set; } = new List<Word>();
public List<Word> Folder1 { get; set; } = new List<Word>();
public List<Word> Folder2 { get; set; } = new List<Word>();
public List<Word> Folder3 { get; set; } = new List<Word>();
public List<Word> FolderFinal { get; set; } = new List<Word>();
}
看起来像Dictionary<string, List<Word>>
Dictionary<string, List<Word>> trainerFile = new Dictionary<string, List<Word>>();
trainerFile.Add("FolderInitial", new List<Word>());
trainerFile.Add("Folder1", new List<Word>());
trainerFile.Add("Folder2", new List<Word>());
trainerFile.Add("Folder3", new List<Word>());
trainerFile.Add("FolderFinal", new List<Word>());
然后像这样访问:
List<string> initial = trainerFile["FolderInitial"];
trainerFile["Folder2"].Add(new Word());
Word word = trainerFile["Folder2"][0];
要访问每个单词,
IEnumerable<Word> all = trainerFile.Values.SelectMany(i => i);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.