Так что код, который вы разместили, выдает ошибку компилятора, когда я пытаюсь его запустить. Однако ошибка, которую я получаю, объясняет, почему вы видите другое поведение. Ошибка я получаю это:
CS0252: Warning as Error: Possible unintended reference comparison;
to get a value comparison, cast the left hand side to type 'string'
Глядя на код, который генерирует Spark, ошибки и поведение, которые вы видите, имеют гораздо больше смысла. Первый фрагмент кода генерирует следующее сравнение:
if (Equals(Eval("context.UserAccount.Country"),"BE"))
Я почти уверен, Eval
возвращает что-то типа object
(независимо от того, какой тип переменной является действительным). Тогда вызов Equals
, вероятно, эквивалентен следующему:
Eval("context.UserAccount.Country").Equals("BE")
, который затем использует перегруженный метод equals для строкового класса (спасибо, полиморфизм), который возвращает true. Где в качестве второго случая:
if (Eval("context.UserAccount.Country") == "BE")
, вероятно, просто выполняет сравнение ссылок между двумя объектами, которое возвращает false.
Если вы не используете #
до context.UserAccount.Country
, Spark сгенерирует следующий код (обратите внимание на отсутствие вызова Eval
):
if (context.UserAccount.Country == "BE")
Предполагая, что context
имеет свойство UserAccount
, которое имеет свойство Country
типа string, тогда выражение должно корректно принимать значение true, когда Country имеет значение "BE".