从Dictionary <string,string>获取第一个键

Mic*_*hel 42 c#

我正在使用System.Collections.Generic.Dictionary<string, string>.

我想从这本词典中返回第一个键.我试过,dic.Keys[0]但我在Keys属性上唯一的东西(它是一个KeyCollection对象)是一个枚举器.

我是否必须通过所有键来枚举第一个?

Jon*_*eet 97

假设您使用的是.NET 3.5:

dic.Keys.First();
Run Code Online (Sandbox Code Playgroud)

请注意,没有保证在字典中迭代键/值对的顺序.您可能会发现,在很多情况下,您会获得您在词典中输入的第一个键 - 但您绝对不能依赖它.正如Skirwan所说,并没有真正的"第一"概念.从本质上讲,上面的内容将为您提供"字典中的一把钥匙" - 这就是所有保证.

(如果你不知道字典是否为空,你可以使用FirstOrDefault.)

  • 我收到错误CS1061.需要添加`using System.Linq;`才能成功. (5认同)
  • 你是如何在.NET 2及更早版本中执行此操作的 (2认同)
  • @WebDrive:如果你想要第一个*值*,只需使用`dic.Values.First()`.无需通过钥匙. (2认同)

小智 23

'first'的概念并不真正适用于字典,因为条目没有排序; 允许任何插入或删除从根本上改变键的顺序.

  • +1表示正确.不保证在字典中订购.也许SortedDictionary会更有用. (3认同)

Pau*_*ane 13

首先,不,您不必枚举所有条目 - 只需枚举第一项:

IEnumerator enumerator = dictionary.Keys.GetEnumerator();
enumerator.MoveNext();
object first = enumerator.Current;
Run Code Online (Sandbox Code Playgroud)

理想情况下,人们会检查MoveNext()实际上是否成功(它返回一个bool),否则对Current的调用可能会抛出.

另请注意,未指定dicitonary的顺序.这意味着"第一个"项目实际上可能是任何键,在后续调用中可能不同(尽管实际上不会),并且当项目被添加到字典中时会发生变化.


Tho*_*mar 9

看起来有点过头了,但是怎么样

foreach (<Type> k in dic.Keys)
    return k;
Run Code Online (Sandbox Code Playgroud)