Здравствуйте, <Аноним>, Вы писали:
А>Пример не совсем удачен исходный код компилировался только в Debug версию:
А>Assert(parameter : object != null, <#The "NotNull" contract of parameter #>
А> <#"parameter" has been violated.#>);
А>А то что получили в итоге будет тормозить каждый вызов Release.
Насчет этого я думаю так: не все ошибки удается проверить во время тестирования. Что-то неизбежно попадет в релиз. И лично я готов принести производительность в жертву (небольшую в данном случае), если взамен я получаю декларативно объявленный контракт и вразумительное сообщение об ошибке, буде таковая случится у заказчика.
... << RSDN@Home 1.2.0 alpha rev. 788>>
Хотя нет, наверное попадет, перепутал с System.Diagnostics.Debug.Assert
Здравствуйте, Сергей Туленцев, Вы писали:
СТ>Насчет этого я думаю так: не все ошибки удается проверить во время тестирования. Что-то неизбежно попадет в релиз. И лично я готов принести производительность в жертву (небольшую в данном случае), если взамен я получаю декларативно объявленный контракт и вразумительное сообщение об ошибке, буде таковая случится у заказчика.
Т.е. Вы считаете что такой код приведеный ниже поможет выявить что-либо у заказчика? Только если Вы отдадите ему Debug, потому что как сказано в примечании "Assert – это System.Diagnostics.Trace.Assert()" т. е. в Release он не попадет. И примерно вот что отанется:
if (p.ty.CanBeNull)
{
def loc = m.Body.Location;
def msg = <#The "NotNull" contract of parameter "#>
+ $<#$(p.Name)" has been violated.#>;
def name = <[ $(p.AsParsed().ParsedName : name) ]>;
def condition = if (p.ty.Fix().IsValueType) name
else <[ $name : object ]>;
m.Body = <[
when ($condition == null){}
$(m.Body)
]>;
m.Body.Location = loc;
}
else
Message.Warning(p.Location,
$"Parametr '$(p.Name)' has type '$(p.ty)' which not support null");
Здравствуйте, USBLexus, Вы писали:
USB>Хотя нет, наверное попадет, перепутал с System.Diagnostics.Debug.Assert
Именно. А вообще-то — это пример. Макросы тем и хороши, что каждый может написать собственную версию которая будет отражать его предпочтения.
В мои задачи не входило создать макрос для дргих. В них входило показать как создавать макросы.