Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字典中获取第一个键<;字符串,字符串>;_C# - Fatal编程技术网

C# 从字典中获取第一个键<;字符串,字符串>;

C# 从字典中获取第一个键<;字符串,字符串>;,c#,C#,我使用的是系统.Collections.Generic.Dictionary 我想从这本字典中返回第一个键。我尝试了dic.Keys[0],但是Keys属性(它是KeyCollection对象)上唯一的东西是枚举器 我必须列举所有的键才能得到第一个吗?似乎有点过头了,但是怎么样 foreach (<Type> k in dic.Keys) return k; foreach(dic.键中的k) 返回k; 由于词条没有顺序,“第一”的概念并不适用于字典;任何插入或删除操作都可

我使用的是
系统.Collections.Generic.Dictionary

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


我必须列举所有的键才能得到第一个吗?

似乎有点过头了,但是怎么样

foreach (<Type> k in dic.Keys)
    return k;
foreach(dic.键中的k)
返回k;

由于词条没有顺序,“第一”的概念并不适用于字典;任何插入或删除操作都可以从根本上改变键的顺序。

假设您使用的是.NET 3.5:

dic.Keys.First();
请注意,在字典中迭代键/值对的顺序没有保证。你可能会发现,在很多情况下,你会把你放在字典里的第一把钥匙拿出来,但你绝对不能依赖它。正如斯基尔万所说,实际上并不存在“第一”的概念。从本质上说,上述内容将为您提供“字典中的一个密钥”-这就是保证的全部内容


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

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

IEnumerator enumerator = dictionary.Keys.GetEnumerator();
enumerator.MoveNext();
object first = enumerator.Current;
理想情况下,可以检查MoveNext()是否实际成功(它返回bool),否则对Current的调用可能会抛出


还请注意,未指定DICITORY的顺序。这意味着“第一个”项实际上可能是任何键,在后续调用中可能会有所不同(尽管实际上不会),并且随着项在字典中的添加和删除,肯定会发生变化。

我们可以使用
linq
技术

var key = dic.Take(1).Select(d => d.Key).First()
或者我们可以使用另一个搜索

var myList = dic.Take(1).Where(d => d.Key.Contains("Heaven")).ToList();

+1表示正确。不能保证在字典中排序。也许一本分类词典会更有用。同上同上(至少15个字符)正如你们中的许多人所说,没有“第一”。我必须让自己更清楚一点:你可以在查询字符串中指定一个区域,我检查它是否在我的区域列表中。如果不是(用户编辑查询字符串),我只是将其设置为已知的“第一个”区域。可能重复的@MichaelFredgeim可能是重复的,但这个问题是3年前提出的,因此当时它不可能是真正的重复。“可能重复”这是一种清理的方式——关闭类似的问题,并保留一个最好的答案。日期不是必需的。看看你是否同意它需要澄清,请在nice上投票,没有在intellisense中看到它,所以我认为这是一个不可linq的对象(lazy me:),你在.NET 2中如何做到这一点earlier@ina:您可以自己轻松编写一个
First()
方法,该方法只使用
foreach
和中的return语句。但我强烈建议您尽可能升级。。。当您有LINQ可用时,生产力上的差异是巨大的…@WebDrive:如果您想要第一个值,只需使用
dic.Values.first()
。不需要通过钥匙。我有一个错误CS1061。需要使用System.Linq添加
成功。