4

なぜこれで空のセットが生成されるのですか?

Object[] types = {23, 234, "hello", "test", true, 23};

var newTypes = types.Select(x => x.GetType().Name)
    .Where(x => x.GetType().Name.Equals("Int32"))
    .OrderBy(x => x);

newTypes.Dump();
4

6 に答える 6

11

あなたがあなたの選択をするとき、あなたは得ていますIEnumerable<String>。次に、リスト内の各文字列(すべて「文字列」)のタイプを取得し、「Int32」(リスト全体)と等しくない場所でそれらを除外します。エルゴ...リストは空です。

于 2009-11-04T16:54:41.140 に答える
5

Equalsは問題なく機能しますが、正しくないのはクエリです。リスト内の整数を選択する場合は、次を使用します。

var newTypes = types.Where( x => x.GetType().Name.Equals("Int32") )
                    .OrderBy( x => x );
于 2009-11-04T16:57:17.373 に答える
5

操作の順序を逆にします。

var newTypes = types.Where(x => x is int)
    .OrderBy(x => x)
    .Select(x => x.GetType().Name);

(これも、かなり特殊なものではなく、直接型チェックを使用していることに注意してください.GetType().Name.Equals(…))。

于 2009-11-04T16:57:36.680 に答える
3

LINQの特徴は、SQL用語で考えるのをやめなければならないということです。SQLでは次のように考えます:-

SELECT Stuff
FROM StufF
WHERE Stuff
ORDER BY Stuff

それはあなたのコードがどのように見えるかです。ただし、LINQでは次のように考える必要があります:-

FROM Stuff
WHERE Stuff
SELECT Stuff
ORDER BY Stuff
于 2009-11-04T17:12:05.340 に答える
1
var newTypes = types.Select(x => x.GetType().Name)
    .Where(x => x.Equals("Int32"))
    .OrderBy(x => x);
于 2009-11-04T16:56:23.297 に答える
1

Selectステートメントはコレクション内のすべての値をその値の基になるタイプの名前に変換するため、これは機能しません。結果のコレクションには文字列値のみが含まれるため、Int32という名前は付けられません。

于 2009-11-04T16:56:27.813 に答える