перегруженный == операторы и невведенные контейнеры (arraylists, наборы данных, и т.д.):
string my = "my ";
Debug.Assert(my+"string" == "my string"); //true
var a = new ArrayList();
a.Add(my+"string");
a.Add("my string");
// uses ==(object) instead of ==(string)
Debug.Assert(a[1] == "my string"); // true, due to interning magic
Debug.Assert(a[0] == "my string"); // false
Решения?
всегда использование string.Equals(a, b)
, когда Вы сравниваете строковые типы
дженерики использования как List<string>
, чтобы гарантировать, что оба операнда являются строками.
Я связал воедино пару замечательных примеров выше (спасибо, как всегда, г-ну Скиту и г-ну Карлсену ), чтобы включить пару различных Observables и использовал интерфейс, чтобы отслеживать их в Observer, и позволяет Observer "
case 'tagName': break;
... это решение, но чтобы поблагодарить RedSquare за подсказку, я пометил его.