我正在使用Visual Studio 2012在C#中使用Windows 8的小应用程序。由于本教程,我尝试在后台注册任务:
http://msdn.microsoft.com/en-us/library/windows/apps/jj709906.aspx
然而,这一行给了我一个错误("第一个"加下划线):
var iter = Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks
.first();
这是错误:
' System.Collections.Generic.IReadOnlyDictionary'不包含' first'的定义没有扩展方法' first'接受类型' System.Collections.Generic.IReadOnlyDictionary'的第一个参数。可以找到(您是否缺少using指令或程序集引用?)MainPage.xaml.cs
所以我检查了所有的库是否在这里。看起来像是,其中包括:
using System.Collections.Generic;
我搜索了我的错误并查找了有关IReadOnlyDictionary的内容,但没有找到任何内容,因为我是Windows开发人员...我请求您的帮助:)
非常感谢,
答案 0 :(得分:2)
似乎你想要First()
,你使用的是first()
。
如果您没有检查是否有任务,我建议FirstOrDefault()
。否则你会得到一个例外。
如果仍然没有获得First()方法,请检查导入:
using System.Linq;
答案 1 :(得分:0)
C#区分大小写! First
有大写F
var iter = Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks
.First();
相关名称空间为System.Linq
,可导入extension method First
。它不是任务集合的成员,而是静态类System.Linq.Enumerable
的成员。
您必须导入此命名空间才能使用扩展方法
using System.Linq;
此命名空间中的Extension方法扩展IEnumerable<T>
,它由您的案例中的任务集合实现。
扩展方法看起来像是它们扩展的类型的成员,但实际上这只是编译器魔术。编译器在内部将代码转换为以下代码:
var iter = Enumerable.First(
Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks);
你也可以这样称呼它。
答案 2 :(得分:0)
First()
不是first()
。 C#是一种区分大小写的语言。替换为
var iter = Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks
.First();
但如果您没有验证任务是否存在于代码中的其他位置,我也会采取BlueM的方式。
您无法找到有关您的问题的更多信息的原因是因为抛出的错误只是声明无法找到您调用的方法。前几天我和同样的分号发生了同样的问题。我在互联网上搜索了大约一个小时,然后我回头看了看我的代码并意识到我做了什么。
虽然这些错误代码可能会引起混淆,但如果您查看邮件的末尾,
(are you missing a using directive or an assembly reference?)
我们知道First()
是我们可以调用的方法,它是预定义的。逻辑上我们知道,如果我们调用的方法甚至不接受参数并且是预定义但仍然抛出错误,那么它一定是我们作为开发人员的错误。我希望这会有所帮助,不确定你是编程新手还是c#。