c# LINQでのToArrayの表示方法について

タグの編集
投稿者 ケンケン  (社会人) 投稿日時 2022/8/1 15:30:06
LINQ で抽出したデータをToArrayに変換して表示したいです。

            List<Name> namesserch = new List<Name>();

            namesserch.Add(new Name("商品", "Product"));
            namesserch.Add(new Name("商品名", "ProductName"));
            namesserch.Add(new Name("在庫", "Stock"));


            var naserch =
                  namesserch.Where( 
                      item => item.Japanese.Contains("在庫")); 

            Console.WriteLine(naserch.ToArray());
                                                 ↑上手く表示されません。
      何方か、ご存知の方ご教授お願い致します。


Name の class

       class Name
        {
            public Name(string japanese, string english)
            {
                Japanese = japanese;
                English = english;
            }
            public string Japanese { get; }
            public string English { get; }
        }
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/8/1 15:51:06
> Console.WriteLine(naserch.ToArray());
>                                                  ↑上手く表示されません。
そもそも、どのように表示したいのでしょうか?
一次元配列を Console.WriteLine すれば、【型名[]】と表示されるはずです。
int[] numbers = { 3, 1, 4, 1, 5, 9, 2 };
Console.WriteLine(numbers);  // 【System.Int32[]】と表示されます

 

メンバーを表示したいという意図であれば、ToArray の出番はありません。
たとえばこのように書けます。
// Console.WriteLine(naserch.ToArray());
foreach (Name n in naserch)
{
    Console.WriteLine("Jp={0}, En={1}", n.Japanese, n.English);
}



どうしても ToArray にしたいとなれば、Name クラス側に 
public override string ToString() { return "Jp=" + Japanese + ", En=" + English; }
 を追加した上で、呼び出し側を 
// Console.WriteLine(naserch.ToArray());
Array.ForEach(naserch.ToArray(), Console.WriteLine);
に変更するとか…。
投稿者 ケンケン  (社会人) 投稿日時 2022/8/1 16:03:53
Jp=在庫, En=Stock
上記の様に出したかったです。
とても参考になりました。
ありがとうございます。

因みに
 Console.WriteLine(naserch.ToArray());
  ↓ 
 Whereapp.Program+Name[] この様に出力されます。
 よくわかりませんでした。
 
 (・・;)
投稿者 (削除されました)  () 投稿日時 2022/8/1 16:41:51
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/8/1 16:43:16
> Whereapp.Program+Name[] この様に出力されます。

"+" はクラス内のクラスのように、入れ子の型であることを示します。

現状は、下記の階層構造になっていますよね。
その場合、"Whereapp.Program+Name[]" と表示されます。
namespace Whereapp
{
    class Program
    {
        // 略
        class Name
        {
            // 略
        }
    }
}



Name クラスが下記のように宣言されていれば、 "Whereapp.Name[]" になります。
namespace Whereapp
{
    class Program
    {
        // 略
    }
    class Name
    {
        // 略
    }
}



Name クラスが下記のように宣言されていれば、 "Name[]" になります。
namespace Whereapp
{
    class Program
    {
        // 略
    }
}
class Name
{
    // 略
}
投稿者 ケンケン  (社会人) 投稿日時 2022/8/1 16:46:33
いろいろと勉強になります。
ありがとうございます。