0

匿名型のコレクションをパラメータとしてメソッドを宣言する方法はありますか?

たとえば、この疑似構文のようなもの:

private void dosomething ( List<class with { string Name, string Lastname, int Age }> persons) {
... 
}

使い捨てクラスの作成を避けるため。

UPDATE 私が望むのは、このメソッドにデータを渡すためだけに使用するクラスの定義を避けることです。

4

3 に答える 3

2

アップデート

あなたの質問は少し混乱しています。

質問の最初の部分によると、一般的な方法が必要だと思います。

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) {
    ... 
}
于 2012-11-14T08:37:12.600 に答える
1

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 に変更された場合、実行時まで問題があることはわかりません。

于 2012-11-14T08:37:34.877 に答える
0

動的キーワードを使用してこれを行うことができますが、厳密に型指定されたプロパティは失われます。

private void doSomething (List<dynamic> persons)
{
var name = persons.FirstOrDefault().Name;
}
于 2012-11-14T08:38:35.473 に答える