Это зависит. В отладочная сборка, я хочу видеть исходное отслеживание стека с как можно меньшим усилием. В этом случае, "бросок"; отвечает всем требованиям. В сборке конечных версий, однако, (a) я хочу зарегистрировать ошибку с исходным отслеживанием стека, включенным, и как только это сделано, (b) повторно сформируйте обработку ошибок, чтобы иметь больше смысла пользователю. Здесь "Выдают Исключение", имеет смысл. Это верно, что перебросок ошибки отбрасывает исходное отслеживание стека, но неразработчик ничего не вытаскивает из наблюдения информации трассировки стека, таким образом, это должно хорошо повторно бросить ошибку.
void TrySuspectMethod()
{
try
{
SuspectMethod();
}
#if DEBUG
catch
{
//Don't log error, let developer see
//original stack trace easily
throw;
#else
catch (Exception ex)
{
//Log error for developers and then
//throw a error with a user-oriented message
throw new Exception(String.Format
("Dear user, sorry but: {0}", ex.Message));
#endif
}
}
путь вопрос сформулирован, сложив "Бросок": по сравнению с "Броском исключая"; делает его определенным отвлекающим маневром. Реальный выбор между "Броском"; и "Выдают Исключение", где "Бросок исключая"; маловероятный особый случай, "Выдают Исключение".
Из Спецификации общего языка :
CLS-совместимые компиляторы языков должны следовать правилам Приложения 7 Технического отчета 15 стандарта Unicode 3.0, который регулирует набор символов, которые могут начинаться и входить в идентификаторы. Этот стандарт доступен на веб-сайте Консорциума Unicode.
Если вы посмотрите это :
То есть первый символ идентификатора может быть прописной буквой, строчной буквой, буквой заголовка, буквой-модификатором, другой буквой или буквенным числом. Последующие символы идентификатора могут быть любыми из них, а также знаками без пробелов, знаками объединения интервалов, десятичными числами, пунктуацией соединителей и кодами форматирования (такими как метка вправо-влево).
Соответствие CLS связано с взаимодействием между различными .NET языками. Свойство несовместимо с CLS, поскольку оно начинается с подчеркивания и является общедоступным (примечание: к защищенным свойствам в общедоступном классе можно получить доступ извне сборки). Хотя это будет работать, если к свойству обращаются из C #, но может и не работать, если к нему обращаются из других языков .NET, которые не допускают подчеркивания в начале имен свойств, следовательно, это несовместимо с CLS.
Вы получаете эта ошибка компилятора, потому что где-то в коде вы пометили свою сборку как совместимую с CLS с помощью строки примерно такого вида:
[assembly: CLSCompliant(true)]
Visual Studio включает эту строку в файл AssemblyInfo.cs, который можно найти в разделе «Свойства» в большинстве проектов.
Чтобы обойти эту ошибку, вы можете:
Сделайте сборку несовместимой с CLS:
[сборка: CLSCompliant (false)]
Добавьте атрибут только к своей собственности:
[Соответствует CLSC (ложь)]
protected bool _isNew;
Измените область действия свойства, чтобы его нельзя было увидеть за пределами сборки.
private bool _isNew;
Используйте $ RANDOM
. Это часто полезно в сочетании с простой арифметикой оболочки. Например, чтобы сгенерировать случайное число от 1 до 10:
$ echo $((1 + RANDOM % 10))
3
Фактический генератор находится в variables.c
, функция brand ()
. Старые версии представляли собой простой линейный генератор. Версия 4.0 bash
использует генератор со ссылкой на статью 1985 года, что, по-видимому, означает, что это достойный источник псевдослучайных чисел. Я бы не стал использовать его для моделирования (и уж точно не для криптографии), но он, вероятно, подходит для базовых задач написания сценариев.
Если вы '
Нижнее подчеркивание вызывает проблему. Обычная практика заключается в том, что подчеркивание зарезервировано для закрытых полей. Члены protected / public должны быть правильно заключены в регистр и названы.
Например:
public abstract class DomainObjectBase{
private bool _isNew;
protected bool IsNew { get { return _isNew; } set { _isNew = value;} }
}
ИЛИ, если вы хотите использовать 3.x и избавиться от частного поля:
public abstract class DomainObjectBase{
protected bool IsNew { get; set; }
}
Идентификатор, совместимый с CLS, не должен начинаться с подчеркивания.
Ведущий _ не соответствует требованиям CLS
Microsoft StyleCop проанализирует ваш код и предоставит ссылки на соответствующие документы, объясняющие, почему он не соответствует требованиям CLS.
Поскольку имя элемента данных, _isNew
, начинается с символа подчеркивания.