匿名型のコレクションをパラメータとしてメソッドを宣言する方法はありますか?
たとえば、この疑似構文のようなもの:
private void dosomething ( List<class with { string Name, string Lastname, int Age }> persons) {
...
}
使い捨てクラスの作成を避けるため。
UPDATE 私が望むのは、このメソッドにデータを渡すためだけに使用するクラスの定義を避けることです。
匿名型のコレクションをパラメータとしてメソッドを宣言する方法はありますか?
たとえば、この疑似構文のようなもの:
private void dosomething ( List<class with { string Name, string Lastname, int Age }> persons) {
...
}
使い捨てクラスの作成を避けるため。
UPDATE 私が望むのは、このメソッドにデータを渡すためだけに使用するクラスの定義を避けることです。
アップデート
あなたの質問は少し混乱しています。
質問の最初の部分によると、一般的な方法が必要だと思います。
private void dosomething<T>(List<T> items) {
...
}
しかし、あなたが書いたコードを見た後は、インターフェイスが必要ですIPerson
public interface IPerson
{
Name { get; set; }
LastName { get; set; }
Age { get; set; }
}
private void dosomething(List<IPerson> persons) {
...
}
make a class
メソッドのスコープ外で匿名型を表現する方法がないため、匿名型は個々のメソッドのスコープ外で強力な方法で渡すことができないため、この匿名型を使用する必要があります。しかし、本当にしたくない場合は、ダイナミクスを使用できます。
public void DoSomething (IEnumerable<dynamic> list)
{
foreach (dynamic item in list)
{
string name = item.Name;
string lastName = item.LastName;
int age = item.Age;
}
}
これは厳密に型指定されていないことに注意してください。たとえば、Name が EmployeeName に変更された場合、実行時まで問題があることはわかりません。
動的キーワードを使用してこれを行うことができますが、厳密に型指定されたプロパティは失われます。
private void doSomething (List<dynamic> persons)
{
var name = persons.FirstOrDefault().Name;
}