2017-02-21 7 views
0

У меня есть класс с некоторыми глобальными и постоянными словарями. Например:C# Назначение статического словаря для отфильтрованной версии другого словаря в статическом классе

public static class Constants 
{ 
    public static Dictionary<string, MyObject> MyDictionary= new Dictionary<string, MyObject>() 
    { 
     {"first", new MyObject()}, 
     {"second", new MyObject()}, 
    }; 
} 

Скажем, мне нужен еще один словарь, чтобы быть похожим только на некоторые добавленные и удаленные элементы. Есть ли способ достичь этого, в статическом классе? Я представляю себе что-то вроде:

public static Dictionary<string, MyObject> MyOtherDictionary = MyDictionary.Remove("second").Add("Third", new MyObject()) 

Но я знаю, что это не сработает, так что я могу достичь этого?

+0

[ 'Remove'] (https://msdn.microsoft.com/en-us/library/kabs04ac (v = vs.110) .aspx) возвращает a 'bool', вы не можете использовать' Add' на bool –

ответ

2

Нет, не работает таким образом, по двум причинам:

  1. Remove возвращает bool, вы не можете использовать Add на BOOL
  2. даже если вы сделаете это компилировать, вы не хочу изменить другой словарь, но вы хотите создать новый словарь, который содержит подобные элементы, вы можете использовать конструктор:

public static Dictionary<string, MyObject> MyOtherDictionary; 
// ... 
static Constants 
{ 
    MyOtherDictionary = new Dictionary<string, MyObject>(MyDictionary); 
    MyOtherDictionary.Remove("second"); 
    MyOtherDictionary.Add("Third", new MyObject()); 
} 
+0

Спасибо! Я не знаю, почему я этого не осознавал. – Niklas

1

Вы можете сделать это, используя свойства вместо

public static class Constants 
{ 
    public static Dictionary<string, MyObject> myDictionary 
    { 
     get 
     { 
      return new Dictionary<string, MyObject>() 
      { 
       { "first", new MyObject()}, 
       { "second", new MyObject()}, 
      }; 
     } 
    } 

    static Dictionary<string, MyObject> _myOtherDictionary; 
    public static Dictionary<string, MyObject> myOtherDictionary 
    { 
     get 
     { 
      _myOtherDictionary = myDictionary; 
      _myOtherDictionary.Remove("first"); 
      _myOtherDictionary.Add("third", new MyObject()); 
      return _myOtherDictionary; 
     } 
    } 
}