Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

csharp / linq > object[]からHelloを含むstringだけ取得 > var hellos = test.OfType<string>().Where(x => x.Contains("Hello"));

More than 3 years have passed since last update.

Qiitaのコメントにて教えていただいものを元に勉強。

object[]から"Hello"という文字を含むものだけ取得したい。

参考 Keibalight

NG版

http://ideone.com/BcQ3Ul

test
    .Where(o => o.Contains("Hello"))
    .Select(o => o.ToString())

上記のようにContains()で絞り込もうとしたら以下のようになった。

prog.cs(17,20): error CS1929: Type object' does not contain a memberContains' and the best extension method overload System.Linq.ParallelEnumerable.Contains<string>(this System.Linq.ParallelQuery<string>, string)' requires an instance of typeSystem.Linq.ParallelQuery'

OK版 (注意点あり)

http://ideone.com/wql0mL

using System;
using System.Linq;

public class Test
{
    public static void Main()
    {
        object[] test = new object[5];
        test[0] = "Hello,Ken";
        test[1] = 3.1415;
        test[2] = "Hello,Taro";
        test[3] = "Hi,Yoko";
        test[4] = 27182;

        var hellos = 
          test
            .Where(o => o != null)
            .Select(o => o.ToString())
            .Where(o => o.Contains("Hello"))
            ;

        foreach(var hello in hellos) {
            Console.WriteLine(hello);
        }
    }
}
結果
Success time: 0.05 memory: 24064 signal:0
Hello,Ken
Hello,Taro

(追記)
ただし、@NetSeed さんのコメントにあるように、本来望まないものを拾ってしまう場合もあるとのこと。
NetSeedさんの方法var hellos = test.OfType<string>().Where(x => x.Contains("Hello"));を使う方がよさそう。

http://ideone.com/WOxBjD
において、

xhellos (OK版)の結果は以下

結果
Success time: 0.05 memory: 24024 signal:0
Hello,Ken
Hello,Taro
Test+HelloClass

hellos(NetSeedさん版)の結果は以下

結果
Success time: 0.04 memory: 24016 signal:0
Hello,Ken
Hello,Taro
7of9
セブンオブナインです。Unimatrix 01の第三付属物 9の7という識別番号です。Star trek Voyagerの好きなキャラクターです。まとめ記事は後日タイトルから内容がわからなくなるため、title検索で見つかるよう個々の記事にしてます。いわゆるBorg集合体の有名なセリフから「お前たち(の知識)を吸収する。抵抗は無意味だ」。Thanks in advance.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away