Вы можете просто проверить, равен ли элемент id
свойству id
некоторого элемента из set
return !set.contains { [110].id == entry.id }
Конструкторы те же. Причина, по которой я предпочел бы второй вариант, заключается в том, что он позволит вам удалить символы подчеркивания из имен ваших частных переменных и сохранить контекст (улучшая понятность). Я стараюсь всегда использовать this
при обращении к переменным и свойствам экземпляра.
Я больше не использую ключевое слово this
таким образом после перехода в другую компанию с другим стандарты. Я привык к нему и теперь редко использую его, когда обращаюсь к членам экземпляра. Я по-прежнему рекомендую использовать свойства (очевидно).
Моя версия вашего класса:
class Life
{
//Fields
private string person;
private string partner;
//Properties
public string Person
{
get { return this.person; }
set { this.person = value; }
}
public string Partner
{
get { return this.partner; }
set { this.partner = value; }
}
public Life()
{
this.person = "Dave";
this.partner = "Sarah";
MessageBox.Show("Life Constructor Called");
}
}
или, что еще лучше, но не так ясно об использовании this
с полями.
class Life
{
//Properties
public string Person { get; set; }
public string Partner { get; set; }
public Life()
{
this.Person = "Dave";
this.Partner = "Sarah";
MessageBox.Show("Life Constructor Called");
}
}
«this» также используется в .Net 3.5 с методами расширения:
public static class MyExtensions
{
public static string Extend(this string text)
{
return text + " world";
}
}
расширит класс строк
var text = "Hello";
text.Extend();
Чтобы ответить на ваш вопрос: нет, нет Разница в ваших двух конструкторах. Imo, «this» загромождает код и должен использоваться только при необходимости, например, когда параметры и переменные поля имеют одинаковые имена.
Существует также случай, когда класс явно реализует интерфейс. Если вам нужно вызвать методы интерфейса из вашего класса, вам нужно привести его к интерфейсу:
class Impl : IFace
{
public void DoStuff()
{
((IFace)this).SomeMethod();
}
void IFace.SomeMethod()
{
}
}
Оба конструктора в любом случае делают одно и то же, во втором из них this
является избыточным
Вы не должны использовать закрытые переменные _person и _parter. Это цель ваших добытчиков и сеттеров.
Что касается конструкций, то между ними нет реальной разницы. Тем не менее, я всегда предпочитаю использовать ключевое слово This, поскольку оно способствует удобочитаемости.
Нет никакой разницы в двух утверждениях ...
//These are exactly the same.
this._person
//and
_person
Ссылка на "this" подразумевается в случае _person. Я бы не сказал, что это обязательно «лучшая» практика кодирования, я бы сказал, что это просто предпочтение.
Вы можете использовать это, чтобы различать локальную переменную с именем X и одноименное поле / свойство уровня класса.
Поскольку вы используете символы подчеркивания, между именами нет конфликта; поэтому " this.
" является избыточным и может быть опущено. IL не будет затронут.
Пока нет двусмысленности между полем и переменной / параметром, существует только один сценарий, в котором ключевое слово this
(в контексте значения текущего экземпляра - not ctor-chaining) строго необходимо - вызов метода расширения, который определяется отдельно:
this.SomeExtensionMethod(); // works
SomeExtensionMethod(); // fails