我将项目存储在强类型IDictionary<TKey, TValue>
中,以便该值也代表关键字:
public class MyObject
{
public string Name { get; private set; }
public SectionId Section { get; private set; }
public MyObject(SectionId section, string name)
{
Section = section;
Name = name;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof(MyObject)) return false;
return Equals((MyObject)obj);
}
public override int GetHashCode()
{
unchecked
{
return (Name.ToLower().GetHashCode() * 397) ^ Section.GetHashCode();
}
}
}
在我的表示层中,我需要遍历此Dictionary,将每个项添加到ListBox控件。我很难搞清楚如何将MyObject(也可以作为键)转换为ListBox控件可以用作值的字符串。我应该像这样对MyObject.GetHashCode()进行显式调用:
MyListBox.Add(new ListItem(myObject.Name, myObject.GetHashCode())
答案 0 :(得分:1)
我会想到overriding the toString method,在这里你基本上会编写代码来生成一个有意义的字符串,以便在ui中显示
希望我能正确理解你的问题。
答案 1 :(得分:0)
我应该只是对MyObject.GetHashCode()
进行显式调用
不,GetHashCode()
是:
MyObject
。相反,您的每个MyObject
都应该有某种唯一标识符键。这可以是enum
值或由数据库中的IDENTITY列生成的数字,也可以是唯一标识每个特定string
的{{1}},并且您可以从中MyObject
检索MyObject
1}}来自您用作存储库的任何集合或数据库。
如果只有一个MyObject
只有Name
和Section
,那么您可以将两者结合起来:SectionId + ":" + Name
。这样你可以在事后解析这两个值。