如何将唯一对象引用作为列表中项目的字符串

Ben*_*ack 1 .net c# silverlight windows-phone-7

我正在开发一个.NET手机应用程序,我在其中有一个显示给用户的内存中的项目列表.当用户点击用户界面中的项目时,他们将被带到第二个视图中该项目的"详细信息"视图.我目前正在我的班级中使用身份属性来引用列表中的唯一项目,但我想知道是否有更好的方法.

我正在System.Windows.Navigation设置UriMappings如下:

<nav:UriMapping Uri="/Items/{itemId}" 
                MappedUri="/Views/Items.xaml?itemId={itemID}" />
Run Code Online (Sandbox Code Playgroud)

然后我使用NavigationService这样导航:

NavigationService.Navigate(new Uri("/Items/" + item.id.ToString(),
                                   UriKind.Relative));
Run Code Online (Sandbox Code Playgroud)

所有这些都很有效,但我不知道我喜欢为我的Item类包含一个标识列,以便可以将唯一的字符串标识传递给MappedUri查询字符串.我显示列表的用户界面控件为我提供ItemSelectionChanged事件中的底层对象,所以我想知道是否有一种方法可以将该Item对象与唯一的字符串值"匹配" 到列表中的相应引用.如果我可以提供导航服务的简单对象引用,这将很容易,但我不知道如何使用字符串值.这是什么GetHashCode(),如果是的话,我该如何正确使用它?

Mar*_*ers 6

不,GetHashCode不是唯一标识对象的.

GetHashCode方法的默认实现不保证不同对象的唯一返回值.此外,.NET Framework不保证GetHashCode方法的默认实现,并且它返回的值在不同版本的.NET Framework之间是相同的.因此,此方法的默认实现不得用作散列目的的唯一对象标识符.

它设计用于在桶中存储对象(例如在字典中),以便可以快速检索它们.两个相等对象的哈希码必须相等,但两个不同对象的哈希码不必相同.

我认为添加一个Id字段是一个很好的解决方案.如果您不想添加新字段只是为了给对象一个标识,您可以尝试找到一些现有字段的组合,这些字段是保证唯一标识您的对象并使用合适的分隔符来表示它们的字符串表示.请注意,分隔符不能出现在任何字段中.