我的列表如下:
List<Person> people = new List<Person>()
{
new Person() { FirstName = "Bob",LastName="test",EMPID="1234" },
new Person() { FirstName = "Bob",LastName="t",EMPID="1234" },
new Person() { FirstName = "Jane",LastName="test",EMPID="1234" },
new Person() { FirstName = "Jane",LastName="t",EMPID="1234" }
};
如果添加FirstName和LastName,则所有人员字段都是唯一的。
如果我使用
Dictionary<string, Person> dictionary = people.ToDictionary(v => v.FirstName);
然后我会得到Item已经存在的异常。
甚至我也不能使用LastName。
所以我需要使用FirstName和LastName的组合,并且该值可以保存为FirstName;字典键中的#LastName
我是C#development的新手
任何建议都非常有用。
此致
阿南德
答案 0 :(得分:1)
如果您找不到唯一的密钥(或者不想将该密钥用于字典),除IDictionary<TKey, TValue>.
之外还有其他选择
例如,您可以创建一个查找:
people.ToLookup(v => v.FirstName);
查找接受每个键有多个匹配(实际上它是唯一的目的)。然后可以像字典一样访问它,但它将返回枚举而不是单个值:
var lookup = people.ToLookup(v => v.FirstName);
var johns = lookup["John"];
foreach (var john in johns)
{
Debug.WriteLine(john.ToString());
}
你也可以使用linq&#39; GroupBy
扩展,其目的与查找密切相关,但迭代是不同的。另外,您可以在迭代时发现密钥(事先不需要查找密钥的情况):
var groups = people.GroupBy(v => v.FirstName);
foreach (var grp in groups)
{
var key = grp.Key;
foreach (var person in grp)
{
Debug.WriteLine(person.ToString());
}
}