람다 식 사용
MyClass result = list.Find(x => x.GetId() == "xy");
참고 : C #에는 속성에 대한 기본 제공 구문이 있습니다. getter 및 setter 메소드를 작성하는 대신 (Java에서 익숙한 것처럼) 다음과 같이 작성하십시오.
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
set 접근 자에서만 알려진 문맥 키워드입니다. 속성에 할당 된 값을 나타냅니다.
이 패턴이 자주 사용되기 때문에 C #은 자동 구현 속성을 제공 합니다 . 위 코드의 짧은 버전입니다. 그러나 지원 변수는 숨겨져 있고 액세스 할 수 없습니다 (그러나 VB의 클래스 내에서 액세스 할 수 있음).
public string Id { get; set; }
필드에 액세스하는 것처럼 간단히 속성을 사용할 수 있습니다.
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
속성을 사용하여 다음과 같은 목록에서 항목을 검색합니다.
MyClass result = list.Find(x => x.Id == "xy");
읽기 전용 속성이 필요한 경우 자동 구현 속성을 사용할 수도 있습니다.
public string Id { get; private set; }
이렇게하면 Id
클래스 내에서 설정할 수 있지만 외부에서는 설정할 수 없습니다. 파생 클래스에서도 설정해야하는 경우 setter를 보호 할 수도 있습니다.
public string Id { get; protected set; }
마지막으로 속성을 다음 virtual
과 같이 선언 하고 파생 클래스에서 재정 의하여 getter 및 setter에 대해 다른 구현을 제공 할 수 있습니다. 일반적인 가상 방법과 마찬가지로.
C # 6.0 (Visual Studio 2015, Roslyn)부터는 인라인 이니셜 라이저로 getter 전용 자동 속성을 작성할 수 있습니다.
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
대신 생성자 내에서 getter 전용 속성을 초기화 할 수도 있습니다. Getter 전용 자동 속성은 개인 setter가있는 자동 구현 속성과 달리 진정한 읽기 전용 속성입니다.
이것은 읽기-쓰기 자동 속성에서도 작동합니다.
public string Id { get; set; } = "A07";
C # 6.0부터는 속성을 식 본문 멤버로 작성할 수도 있습니다.
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
참조 : .NET 컴파일러 플랫폼 ( "Roslyn")
C # 6의 새로운 언어 기능
C # 7.0 부터는 getter와 setter 모두 표현식 본문으로 작성할 수 있습니다.
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
이 경우 setter는 식이어야합니다. 진술이 될 수 없습니다. 위의 예는 C #에서 할당을 식이나 문으로 사용할 수 있기 때문에 작동합니다. 할당 식의 값은 할당 자체가 부작용 인 할당 된 값입니다. 이것은 당신이 한 번에 두 개 이상의 변수에 값을 할당 할 수 있습니다 : x = y = z = 0
에 해당 x = (y = (z = 0))
하고 진술하는 것과 같은 효과가 있습니다 x = 0; y = 0; z = 0;
.
2020 년 11 월에 출시 될 예정인 다음 언어 버전 인 C # 9.0은 개체 이니셜 라이저에서 초기화 할 수있는 읽기 전용 (또는 더 나은 한 번만 초기화) 속성을 허용합니다. 이것은 현재 getter 전용 속성으로는 불가능합니다.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
됩니다. 기본 키를 찾고 있다는 것을 이미 알고있을 것입니다. 정보를 위해.