Хорошее объяснение того, что происходит при таком вычислении, содержится в документе n1188 из сайта ISO W14 .
Я объясняю идеи.
Основным правилом стандарта ISO 9899, который применяется в этой ситуации, является 6.5p2.
Между предыдущей и следующей точкой последовательности объект должен иметь свое сохраненное значение не более чем один раз, оценивая выражение. Кроме того, предыдущее значение должно быть считано только для определения значения, которое нужно сохранить.
Точки последовательности в выражении типа
i=i++
находятся передi=
и послеi++
.В документе, который я привел выше, объясняется, что вы можете определить, что программа сформирована маленькими ящиками, каждая из которых содержит инструкции между двумя последовательными точками последовательности. Точки последовательности определены в приложении C стандарта, в случае
i=i++
есть две точки последовательности, которые ограничивают полное выражение. Такое выражение синтаксически эквивалентно записиexpression-statement
в форме грамматики Бэксу-Наура (грамматика приведена в приложении A стандарта).Таким образом, порядок инструкций внутри ящика не имеет четкого порядка.
i=i++
можно интерпретировать как
tmp = i i=i+1 i = tmp
или как
tmp = i i = tmp i=i+1
, поскольку обе эти формы интерпретируют код
i=i++
являются действительными и потому, что оба генерируют разные ответы, поведение не определено.Таким образом, точка последовательности может быть видна в начале и в конце каждого окна, которое составляет программу [поля представляют собой атомные единицы в C] и внутри ящика порядок команд не определен во всех случаях. Изменение этого порядка иногда может изменить результат.
EDIT:
Другим хорошим источником для объяснения таких неоднозначностей являются записи с сайта c-faq (также опубликованный как книга ), а именно здесь и здесь и здесь .
Вы можете использовать @@ для этой цели. Подобно var email = firstName + '\@@' + domain;
эта работа для меня
<meta name="author" content="Alan van Buuren @("@Alan_van_Buuren")">
Или вы можете использовать: @@ Alan_van_Buuren
: S
@@ является escape-символом для @ в представлениях Razor, как указано выше.
Однако Razor пытается разобраться, когда «@» является просто «@» и где он отмечает C # (или VB.Net). Одним из основных применений для этого является идентификация адресов электронной почты в представлении Razor - не обязательно избегать символа @ в адресе электронной почты.
Вместо объекта HTML я предпочитаю использовать @ Html.Raw ("@")
Для вопроса о @RazorCodePart1 @@ @RazorCodePart2
вам нужна последовательность:
@RazorCodePart1 @:@@ @RazorCodePart2
Я знаю, это выглядит немного странно, но оно работает и даст вам буквальный символ '@' между кодовые блоки.
Razor @ escape char для символов ...
<img src="..." alt="Find me on twitter as @("@username")" />
или
<img src="..." alt="Find me on twitter as @("@")username" />
использовать <text></text>
или более простой способ @:
Фактически @ следует использовать с синтаксисом синтаксиса Razor или с переменной / моделью для привязки значения.
Например: если для теста назначено значение, то есть @ {var test = "ABC"} то вы можете получить значение по настройкам, так как @test где-нибудь есть страница cshtml в html-части. в противном случае простое использование как @ Html.DisplayName ("test")
@Html.Raw("@")
кажется мне еще более надежным, чем @@
, так как не во всех случаях @@
будет сбежать.
Поэтому:
<meta name="twitter:site" content="@twitterSite">
be:
<meta name="twitter:site" content="@Html.Raw("@")twitterSite">
Я попробовал все варианты выше, и никто не работал. Это то, что я сделал, что сработало:
@{
string str = @"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$";
}
<td>Email</td>
<td>
<input type="text" id="txtEmail" required name="email" pattern=@str />
</td>
Я создал переменную строки и передал в нее весь код шаблона RegEx, затем использовал переменную в html, а Razor был крут с ней.
просто добавьте переменную в файл CSHTML
var myVariable = @"@";
и добавьте ее в свой макет
<span class="my-class"><a href="@myVariale" target="_blank" >link text</a></span>
Я не мог заставить любой из них работать внутри моего атрибута placeholder, поэтому я использовал специальный символ xml.
<input type="text" placeholder="fex: firstname@lastname.com"/>
См. больше примеров здесь. https://www.dvteclipse.com/documentation/svlinter/How_to_use_special_characters_in_XML.3F.html
У меня была такая же проблема. Я объявил переменную, поместив мой текст с помощью @.
@{
var twitterSite = "@MyTwitterSite";
}
...
<meta name="twitter:site" content="@twitterSite">