1

Microsoft の次のコード例があります (http://msdn.microsoft.com/en-us/library/bb534869.aspx):

String[] fruits = {"apple", "banana", "mango", "orange", "passionfruit", "grape" };
var query = fruits.Select((fruit, index) 
  => new {Substring = fruit.Substring(0, index)});

foreach (var obj in query)
  Console.WriteLine("{0}", obj);

これは非常にうまく機能しますが、クエリの種類がわかりません。

デバッガーから情報を取得しようとしましたが、それを宣言して明示的に書き留めることができませんでした。私はいくつかの変種を試しました。

IEnumerable<int,string> query = fruits.Select((fruit, index) 
  => new {Substring = fruit.Substring(0, index)});

しかし、これはまったく構築されます。var を使用せずにクエリ タイプを明示的に定義するにはどうすればよいですか?

4

3 に答える 3

7

ですので、型の指定はできませんanonymous。詳細はこちら: http://msdn.microsoft.com/en-us/library/bb397696.aspx

于 2012-11-12T16:46:33.957 に答える
2

特定の型を指定せずに new 演算子を使用すると、明示的に参照できない匿名型がコンパイラによって作成されます。それを参照できるようにしたい場合は、独自のクラスを作成して明示的に返すか、既存のクラスを返す必要があります。試す:

IEnumerable<string> query = fruits.Select((fruit, index) => fruit.Substring(0, index));
于 2012-11-12T16:50:29.277 に答える
1

完全を期すために、本当に型を指定する必要がある場合 (実際にはその必要はありません - 匿名型は型安全です)、最初にクラス/構造体を宣言する必要があります

public class FruitySubstringyThingy
{
    public string Substring{get;set;}
}

投影でそれを使用します

IEnumerable<FruitySubstringyThingy> items
  = fruits.Select((fruit,index) => new FruitySubstringyThingy{Substring = fruit.Substring(0, index)});
于 2012-11-12T16:52:31.170 に答える