C# ToDictionary中的Lambda表达式

C# ToDictionary中的Lambda表达式,c#,list,dictionary,C#,List,Dictionary,要将列表转换为词典,我们可以通过以下操作轻松完成: list.ToDictionary(v=> v, v=>true); 对于ToDictionary中的第一个参数,我可以理解第一个参数是字典的元素。但是什么是v=>true 第二个参数的类型应为IEqualityComparer。这有什么作用?v=>true如何与IEqualityComparer相同?使用的方法是什么 第二个参数(v=>true)是elementSelector(用于从每个元素生成结果元素值的转换函数) 包含元素

要将列表转换为词典,我们可以通过以下操作轻松完成:

list.ToDictionary(v=> v, v=>true);
对于
ToDictionary
中的第一个参数,我可以理解第一个参数是字典的元素。但是什么是
v=>true

第二个参数的类型应为
IEqualityComparer
。这有什么作用?
v=>true
如何与
IEqualityComparer
相同?

使用的方法是什么

第二个参数(v=>true)是elementSelector(用于从每个元素生成结果元素值的转换函数)

包含元素
1
2
3
的列表将生成具有以下映射的字典(所有值均为
true
):

是指所使用的方法

第二个参数(v=>true)是elementSelector(用于从每个元素生成结果元素值的转换函数)

包含元素
1
2
3
的列表将生成具有以下映射的字典(所有值均为
true
):


当您的列表有[1,2,3,4]并且您通过
list.ToDictionary(v=>v,v=>true)将其转换为字典时那么你的字典有这个值

[1,true]
[2,true]
[3,true]
[4,true].
第一个值是键,第二个值是键

编辑:


正如@dkson所说,第二个参数是元素选择器。当您转到4个条目中的第3个时,您可以在intellisense中看到这一点:)

当您的列表有[1,2,3,4]时,您可以通过
list.ToDictionary(v=>v,v=>true)将其转换为字典那么你的字典有这个值

[1,true]
[2,true]
[3,true]
[4,true].
第一个值是键,第二个值是键

编辑:

正如@dkson所说,第二个参数是元素选择器。当您转到4个条目中的第3个时,您可以在intellisense中看到这一点:)

您可以查看。这是第二个
IEqualityComparer
参数的重载:

ToDictionary<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>, IEqualityComparer<TKey>)
ToDictionary(IEnumerable、Func、IEqualityComparer)
但是,在您的示例中,您正在使用重载,该重载接受负责生成字典值的
Func

ToDictionary<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>)
ToDictionary(IEnumerable,Func,Func)
(在您的例子中,所有值都是
true

请查看。这是第二个
IEqualityComparer
参数的重载:

ToDictionary<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>, IEqualityComparer<TKey>)
ToDictionary(IEnumerable、Func、IEqualityComparer)
但是,在您的示例中,您正在使用重载,该重载接受负责生成字典值的
Func

ToDictionary<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>)
ToDictionary(IEnumerable,Func,Func)

(在您的情况下,所有值都是简单的
true

或此方法的英文版本;-)字典顾名思义就是一个字典,它用来用一个键查找一个值。如果您没有也不需要值,那么最好使用hashset或英语中的this方法;-)字典顾名思义就是一个字典,它用来用一个键查找一个值。如果您没有也不需要值,那么使用HashSetYes可能会更好,但Intellisense显示TodCitialatory中的secodn元素必须是
IEqualityComparer
Yes,但Intellisense显示TodCitialatory中的secodn元素必须是
IEqualityComparer