【问题标题】:"An exception of type 'System.ArgumentException' occurred in mscorlib.ni.dll"“在 mscorlib.ni.dll 中发生了‘System.ArgumentException’类型的异常”
【发布时间】:2015-08-13 07:19:51
【问题描述】:

我得到了一个代码来处理,作为一个初学者,我并不完全理解代码(一个使用 MVVM 的 windows phone 8 Silverlight 项目)。代码有这个

 public Dictionary<CeFlix.Entities.Enums.Views, string> PageRouting = new Dictionary<CeFlix.Entities.Enums.Views, string>()
    {
         {CeFlix.Entities.Enums.Views.DashboardPage,"DashboardPage.xaml"},
         {CeFlix.Entities.Enums.Views.LargeBannerDetailPage,"/Views/LargeBannerDetailPage.xaml"},
         {CeFlix.Entities.Enums.Views.ChannelDataPage,"/Views/ChannelDataPage.xaml"},
         {CeFlix.Entities.Enums.Views.ChannelDetailPage,"/Views/ChannelDetailPage.xaml"},
         {CeFlix.Entities.Enums.Views.VideoDetailPage,"/Views/VideoDetailPage.xaml"},
         {CeFlix.Entities.Enums.Views.UserLoginPage,"/Views/UserLoginPage.xaml"},
         {CeFlix.Entities.Enums.Views.UserRegisterPage,"/Views/UserRegisterPage.xaml"},
         {CeFlix.Entities.Enums.Views.UploadVideoDetailPage,"/Views/UploadVideoDetailPage.xaml"},
         {CeFlix.Entities.Enums.Views.FeedBackDetailPage,"/Views/FeedBackDetailPage.xaml"},
        {CeFlix.Entities.Enums.Views.EditProfileDetailPage,"/Views/EditProfileDetailPage.xaml"},
         {CeFlix.Entities.Enums.Views.ChangePasswordPage,"/Views/ChangePasswordPage.xaml"},
         {CeFlix.Entities.Enums.Views.MyPlaylistDetailPage,"/Views/MyPlaylistDetailPage.xaml"},
          {CeFlix.Entities.Enums.Views.SubscriptionDetailPage,"/Views/SubscriptionDetailPage.xaml"},
            {CeFlix.Entities.Enums.Views.SelectedSearchItemVideoPage,"/Views/SelectedSearchItemVideoPage.xaml"},
            {CeFlix.Entities.Enums.Views.CategoryDetailPage,"/Views/CategoryDetailPage.xaml"},
            {CeFlix.Entities.Enums.Views.WatchLiveVideoPage,"/Views/WatchLiveVideoPage.xaml"},
            {CeFlix.Entities.Enums.Views.CommentsPage,"/Views/CommentsPage.xaml"},
            {CeFlix.Entities.Enums.Views.CommentsPage,"/Views/RepliesPage.xaml"}
    };

我在项目中添加了另外两个页面,我想我可以添加到集合中,所以我在 PageRouting 中添加了两行这样的行

,
            {CeFlix.Entities.Enums.Views.CommentsPage,"/Views/CommentsPage.xaml"},
            {CeFlix.Entities.Enums.Views.CommentsPage,"/Views/RepliesPage.xaml"}

枚举也是这样的,最后两行代表我添加的两个新页面

 public enum Views
{
    DashboardPage = 1,
    LargeBannerDetailPage = 2,
    ChannelDetailPage = 3,
    VideoDetailPage = 4,
    ChannelDataPage = 5,
    UserLoginPage = 6,
    UserRegisterPage = 7,
    EditProfileDetailPage = 8,
    FeedBackDetailPage = 9,
    UploadVideoDetailPage =10,
    ChangePasswordPage =11,
    MyPlaylistDetailPage = 12,
    SubscriptionDetailPage =13,
    SelectedSearchItemVideoPage =14,
    CategoryDetailPage = 15,
    WatchLiveVideoPage=16,
    RepliesPage = 17,
    CommentsPage = 18
}

我以前没有见过这种编程模式。当我启动应用程序时,我抛出了一个异常,上面写着“mscorlib.ni.dll 中发生了‘System.ArgumentException’类型的异常” 我该怎么办?谁能帮忙。 我认为我也发布这个很重要

public void NavigateToPage(CeFlix.Entities.Enums.Views navigateToView, object navigationParameter)
    {
        string path = PageRouting[navigateToView];

        RootFrame.Navigate(new Uri(path + "?Param=" + navigationParameter, UriKind.Relative));
    }

当我现在删除添加到 PageRouting 集合中的两行新代码时,它可以正常编译,但我无法导航到我刚刚添加的那两个新页面。

【问题讨论】:

  • 您需要阅读异常的内容。几乎每个异常都会包含修复错误所需的所有信息。

标签: c# windows-phone-8


【解决方案1】:

字典需要唯一的键,并且您添加了两个具有相同键的条目 - CommentsPage

这看起来像是一个错字,因为您添加了一个 RepliesPage 枚举值。应该是这个吗?

{CeFlix.Entities.Enums.Views.CommentsPage,"/Views/CommentsPage.xaml"},
{CeFlix.Entities.Enums.Views.RepliesPage,"/Views/RepliesPage.xaml"}

【讨论】:

  • 对不起,你能不能用更简单的方式解释一下,或者详细一点,我好像没明白你的意思。因为字典中的每一页都有一个枚举值
  • 是的,但是您已经使用了同一个两次。你不能有重复的键(这也没有意义)。
  • 但是如果您查看枚举内容,请注意,每个枚举值都有一个不同的键(如您所见,从 1 到 18)。没有两个是相同的
  • 查看您添加到字典中的两条路线,它们会破坏您的代码 - 您已经为CommentsPage 添加了一条路线两次,其中包含两条不同的路径。跨度>
  • 你说得对,我只是逐行看,第二个应该是RepliesPage。谢谢大佬
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多