【问题标题】:How to find an Instance of a class inside a Dictionary?如何在字典中找到类的实例?
【发布时间】:2014-02-15 16:13:18
【问题描述】:

如果我对此进行了正确的研究,我之前得到了一些帮助,一位用户说最好使用Dictionary 来存储我的CountryPlaces

所以我创建了我的Dictionary

Dictionary<string, NewCountryClass> NTCD = new Dictionary<string, NewcountryClass>();

当用户单击按钮时,它将触发此类,我希望它在运行时在Dictionary 内创建newCountryClass 的实例。它将添加字符串,即newCountryTitle.Country,然后是Class

public void AddCountryCollection()
{

    newCountryClass = new NewCountryClass(newCountry,"");
    Collections.Add(newCountryClass);
    NTCD.Add(newCountryClass.Country, newCountryClass);
}

假设用户添加了Country,它在运行时创建了这个Dictionary,他们添加了4个Countries,但现在想返回并添加一个Place 第二个国家/地区内的标签。

这是newCountryClass

private string _country;

public string Country
{
   get { return _country; }
   set
   {
      if (_country.Equals(value))
         return;

      _country= value;
      RaisePropertyChanged(() => Country);
   }
}

private ICollection<string> _places;
public ICollection<string> Places
{
   get
   {
      if (_places== null)
         _places= new ObservableCollection<string>();
      return _places;
   }
   set
   {
      if (value == _places)
         return;

      _places= value;
      RaisePropertyChanged(() => Places);
   }
}

如果他们创建了 4 个,并且他们想将 Place 添加到他们创建的 第二个Country 内的列表中,我该如何找到它?

【问题讨论】:

  • 您将使用保存它的密钥 - 在本例中为国家/地区。字典的重点在于它是一个键/值映射。您将其与国家/地区一起存储,因此您需要与国家/地区一起查找。没有“添加的第二个值”的固有概念 - 用户实际上不会只是通过该国家/地区吗?这里的上下文有点混乱......
  • @Ben - 您确实需要阅读 .NET 数据结构和概念。我知道 Jon Skeet 在之前的问题中提到了这一点,这是很好的建议。
  • @JonSkeet 用户将传入Country,因此他们可能会传入EnglandSpainFrance。这些将被列出,然后当他们在Countries 之一上Right-Click 和“添加地点”时,他们可以添加Place(在newCountryClass 中作为ICollection

标签: c# wpf class mvvm dictionary


【解决方案1】:

只需使用您存储的密钥:

NTCD["GER"].Places.Add("New Place inside GER");

如果您只想知道第二个,请使用List&lt;NewCountryClass&gt; 并使用for 按索引进行迭代,或者使用OrderedDictionary。它以对象键,对象值作为参数添加,您可以通过NTCD[3]访问它。

OrderedDictionary Class

【讨论】:

  • 感谢您的回答,工作正常,我刚刚传递了他们选择的标题的字符串变量。
【解决方案2】:

您使用的是Dictionary,因此没有关于某个项目位于特定索引的概念。相反,项目位于特定键处,在您的情况下,它是您的 Country 属性的值。

如果您想通过数字索引获取项目,则需要使用 List 之类的数据结构。

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 2014-11-13
    • 2016-01-05
    • 1970-01-01
    • 2017-09-18
    • 2014-03-17
    • 2021-02-19
    • 1970-01-01
    相关资源
    最近更新 更多