2013-08-19 10 views
5

にパラメータとして匿名型のオブジェクトを渡します。私は、動的な型を使用List<T>オブジェクトを試してみましたが、何も一般的には、私はこのような何かを必要とする方法

public void doSomething(???? queryResult) 
{ 
    foreach (carros ca in queryResult) 
    { 
     Response.Write(ca.nome); 
     Response.Write(" - "); 
     Response.Write(ca.id); 
    } 
} 
+1

ビジュアルスタジオでは、 'var'キーワードの上にマウスを置くと、生成された結果のタイプを見ることができます。 – lukegravitt

答えて

10

に動作しない、それは方法の間に匿名型を渡すために、ほとんど常に悪い考えです。

idの値を保持するカスタムタイプを作成し、匿名タイプではなくカスタムタイプにする必要があります。


あなたの場合、すでに動作するクラスがあります:carros。あなただけの代わりにそれを作成するために、クエリを実行することができます。

var queryResult = from q in cars 
    where q.nome.ToLower().Contains("eco") 
    orderby q.nome 
    select new carros {q.nome, q.id}; 

あなたの方法は次のようになります。

public void doSomething(IEnumerable<carros> queryResults) 
+0

なぜこれが悪い考えであるか説明できますか?彼はすでに 'nome'と' id'を持つ 'Carros'というオブジェクトを持っています – itanex

+0

あなたは説明できますか? –

+3

@FelipeMaricatoMoura:あなたが作成した匿名タイプが* anonymous *なので、悪い考えです。つまり、(リフレクションハッカーの外で)それが使用されたLINQクエリの外でそれを構築する方法はありません。匿名の型が有益であるように、それらは正当に初期メソッドの範囲に制限されています。それらを渡したい場合は、最初のスコープを超えて関連性があることが明らかであるため、名前と宣言が必要です。 –

2

あなたは匿名型を渡すことはできません*現行法の範囲外。あなたは強い型付けされた方法でそれらを使用したいと思うので、ほとんど無用であるだけobjectとして渡すことができます*

public void listar_carros() 
{ 
    List<carros> Lcars = new List<carros>(); 
    Lcars.Add(new carros(1, "Fusca")); 
    Lcars.Add(new carros(2, "Gol")); 
    Lcars.Add(new carros(3, "Fiesta")); 

    var qry = from q in Lcars 
       where q.nome.ToLower().Contains("eco") 
       orderby q.nome 
       select q; 

    doSomething(qry); 

} 

public void doSomething(IEnumerable<carros> qry) 
{ 

    foreach (carros ca in qry) 
    { 
     Response.Write(ca.nome); 
     Response.Write(" - "); 
     Response.Write(ca.id); 
     //Response.Write(ca); 
     Response.Write("<br />"); 
    } 
} 

:あなたのcarrosタイプを使用してください。

+0

doSomething(qry)行にエラーが表示される –

+0

コンパイルエラーを共有できますか? –

+0

申し訳ありません。選択された新しいcarros {q.nome、q.id}では機能しません。新しい{q.nome、q.id}を選択します。 あなたは何を知っていますか? –

2

なぜ新しいオブジェクトを型carrosとして宣言しないのですか?

あなたのパラメータは、その後う
var qry = from q in Lcars 
      where q.nome.ToLower().Contains("eco") 
      orderby q.nome 
      select new carros {q.nome, q.id}; 

:あなたが、その悪いジュジュはanonmyousタイプを渡すことができ言及されている間...本当に場合

IEnumerable{carros} 
+0

それとも、 ' – Magnus

+0

が新しいカロスが動作しません{}新しい単語でerrosに –

+0

ERROを示しq'選択エラー「testeLINQ.carrosは」0引数を取るコンストラクタが含まれていません'testeLINQ.carros'には0個の引数を取るコンストラクタが含まれていません –

3

ちょうど、匿名型を渡すことについてでチャイムたかったです

public void Anon() 
{ 
    var x = new {foo = "bar"}; 

    AnonReciever(x); 
} 

public static void AnonReciever(dynamic o) 
{ 
    Console.WriteLine(o.foo); 
} 

(ダイナミック活用)したかったそしてこれはbar何の問題を印刷します。

私はそれをお勧めしません。あなたがすでに持っているカスタム型付きオブジェクトを使うのがベストです。

+0

ダイナミックな表示エラー "namespace dynamicが見つかりません" –

+0

http://stackoverflow.com/a/14760410/310196 – devshorts

関連する問題