ラムダ式を使用する
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
セットアクセサでのみ認識されるコンテキストキーワードです。プロパティに割り当てられた値を表します。
このパターンはよく使用されるため、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
、クラスの内部を設定できますが、外部からは設定できません。派生クラスでも設定する必要がある場合は、セッターを保護することもできます
public string Id { get; protected set; }
最後に、プロパティをとして宣言virtual
し、派生クラスでそれらをオーバーライドして、ゲッターとセッターに異なる実装を提供できます。通常の仮想メソッドと同じように。
C#6.0(Visual Studio 2015、Roslyn)以降、インライン初期化子を使用してゲッターのみの自動プロパティを記述できます
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
代わりに、コンストラクタ内でゲッターのみのプロパティを初期化することもできます。ゲッターのみの自動プロパティは、プライベートセッターを使用して自動実装されるプロパティとは異なり、真の読み取り専用プロパティです。
これは、読み取り/書き込み自動プロパティでも機能します。
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、両方、ゲッターとセッター、表現体で書くことができます。
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
この場合、セッターは式でなければならないことに注意してください。ステートメントにすることはできません。C#では代入を式またはステートメントとして使用できるため、上記の例は機能します。割り当て式の値は、割り当て自体が副作用である割り当て値です。これにより、一度に複数の変数に値を割り当てることができます。これは、ステートメントとx = y = z = 0
同等でx = (y = (z = 0))
あり、ステートメントと同じ効果がありx = 0; y = 0; z = 0;
ます。
言語の次のバージョンであるC#9.0は、おそらく2020年11月に利用可能になりますが、オブジェクト初期化子で初期化できる読み取り専用(またはより優れた初期化1回)プロパティを許可します。現在、これはゲッターのみのプロパティでは不可能です。
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
場合は、次のようになります。主キーを探していることはすでにわかっています。参考までに。