Другие методы скопируют простой текст в буфер обмена. Для копирования HTML (т.е., можно вставить результаты в редактора WSIWYG), можно сделать следующее в IE ТОЛЬКО . Это, существенно отличается от других методов, поскольку браузер на самом деле явно выбирает содержание.
// create an editable DIV and append the HTML content you want copied
var editableDiv = document.createElement("div");
with (editableDiv) {
contentEditable = true;
}
editableDiv.appendChild(someContentElement);
// select the editable content and copy it to the clipboard
var r = document.body.createTextRange();
r.moveToElementText(editableDiv);
r.select();
r.execCommand("Copy");
// deselect, so the browser doesn't leave the element visibly selected
r.moveToElementText(someHiddenDiv);
r.select();
1) Явный указатель this
необходим только в том случае, если в противном случае ссылка была бы неоднозначной. Поскольку GetRuleViolations
определено в типе, вам, скорее всего, не понадобится это
.
Еще один момент заключается в том, что если GetRuleViolations
вернет IEnumerable
чего-то, вам будет гораздо лучше использовать Any ()
вместо Count () == 0
, поскольку вы рискуете перечислить всю последовательность.
2) Строка может быть выведена из инициализации.
3) Resharper предпочитает var
определенным типам.
Помимо очевидного преимущества зеленого квадрата, если вы пишете код, который позже будет поддерживать кто-то другой, имеет смысл не использовать ваши личные предпочтения в синтаксисе кодирования. Resharper становится полезным в форматировании кода таким образом, чтобы его узнавала очень широкая аудитория.
Я принадлежу к школе мысли, которая утверждает, что неважно, кто прав. Если мы все будем придерживаться шаблона, нам всем будет легче читать код друг друга.
Так что, по моему скромному мнению, не меняйте настройки resharper по умолчанию. Просто примите тот факт, что, используя настройки по умолчанию, вы упростите жизнь всем.
За третий - тот, который меня больше всего раздражает. Он предоставляет читателю меньше информации, и я думаю, что это просто демонстрация новой функции.
Я бы сказал - используйте var, когда вы знаете тип возвращаемого значения, и используйте правильный тип объекта, когда вам это не нравится:
var reader = new XmlReader(.... // Implicit
XmlReader reader = SomeClass.GetReader() // Explicit when you can't be sure
Я думаю, что первый предназначен для этой цели, если вы хотите сделать GetRuleViolations () статическим методом. Тогда вам не нужно удалять идентификатор «this».
Первый: Resharper просит удалить этот
, что для меня просто стиль. Не более того, его сохранение никак не повредит производительности. Это просто вопрос удобочитаемости.
Для второго и третьего: Resharper обычно предпочитает использовать var
вместо конкретного типа данных, поэтому и есть предложения. Я считаю, что это вопрос личного выбора и не дает никаких дополнительных преимуществ, кроме удобочитаемости.
Первое кажется мне непонятным. Обычно не нужно добавлять префикс к этому.
пока нет двусмысленностей, которых я не могу сказать из этого примера. Решарпер, наверное, прав. Два других не улучшат производительность, скомпилированный результат будет таким же. Это просто вопрос вкуса и, конечно же, ваших рекомендаций по кодированию.
Ни один из них не повлияет на производительность, только на удобочитаемость.
Я считаю, что предложения 1 и 2 более читабельны, а 3 - менее читабельны, чем ваши исходный код.
Но вам не нужно просто следовать этим советам, если, например, вы сочтете их менее читаемыми или если они нарушают стандарт стиля кода вашей компании. Когда вы поместите курсор на волнистую линию, нажмите Alt-Enter, чтобы отобразить список контекстных действий. Одно из них - изменить строгость проверки; можно вообще не показывать или показывать как подсказку. Вы можете найти полный список проверок на ReSharper | Опции | Проверка кода | Уровень серьезности проверки .
Я думаю, что это нормально - потому что это не похоже на то, что TruncateToSize
является реально заменяемым компонентом. Это метод, который когда-либо должен делать только одну вещь.
Вам не нужно иметь возможность имитировать все - только службы, которые либо нарушают модульное тестирование (доступ к файлам и т. Д.), Либо который вы хотите протестировать с точки зрения реальных зависимостей. Если бы вы использовали его для аутентификации или чего-то в этом роде, это было бы совсем другое дело ... но просто выполняя прямую строковую операцию, которая не имеет абсолютно никаких возможностей настройки, различных вариантов реализации и т. д. - нет смысла рассматривать это как зависимость в обычном смысле.
Другими словами: если TruncateToSize
были подлинный член String
, не могли бы вы даже дважды подумать над его использованием? Вы также пытаетесь имитировать целочисленную арифметику, вводя IInt32Adder
и т. Д.? Конечно нет. Это то же самое, только вы предоставляете реализацию. Модульное тестирование из TruncateToSize
и не беспокойтесь об этом.
TruncateToSize
был подлинным членом String
, вы бы даже дважды подумали, используя его? Вы также пытаетесь имитировать целочисленную арифметику, вводя IInt32Adder
и т. Д.? Конечно нет. Это то же самое, только вы предоставляете реализацию. Модульное тестирование из TruncateToSize
и не беспокойтесь об этом. если бы TruncateToSize
был подлинным членом String
, вы бы даже дважды подумали, используя его? Вы также пытаетесь имитировать целочисленную арифметику, вводя IInt32Adder
и т. Д.? Конечно нет. Это то же самое, только вы предоставляете реализацию. Модульное тестирование из TruncateToSize
и не беспокойтесь об этом.
так что производительность останется прежней. Я некоторое время не использовал ReSharper и не знаю, почему он так агрессивно продвигает анонимные типы, но одно из преимуществ var заключается в том, что он более устойчив к изменениям.
Имеется в виду, если вместо вызова Method.GetNumber (), вы вызвали обертку, например. Фильтр (Method.GetNumber ()) в той же строке, которая возвращает значение Nullable, вам не придется обновлять тип переменной.