csharp / linq > object[]からHelloを含むstringだけ取得 > var hellos = test.OfType<string>().Where(x => x.Contains("Hello"));
Qiitaのコメントにて教えていただいものを元に勉強。
object[]から"Hello"という文字を含むものだけ取得したい。
参考 Keibalight
NG版
test
.Where(o => o.Contains("Hello"))
.Select(o => o.ToString())
上記のようにContains()で絞り込もうとしたら以下のようになった。
prog.cs(17,20): error CS1929: Type
object' does not contain a member
Contains' and the best extension method overloadSystem.Linq.ParallelEnumerable.Contains<string>(this System.Linq.ParallelQuery<string>, string)' requires an instance of type
System.Linq.ParallelQuery'
OK版 (注意点あり)
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
Author And Source
この問題について(csharp / linq > object[]からHelloを含むstringだけ取得 > var hellos = test.OfType<string>().Where(x => x.Contains("Hello"));), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/f44156f78c74b3a046a4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .