質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

13333閲覧

C# 独自クラスを使ったListから、一つの要素だけ抽出したい

okiasu

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/05/25 06:10

###実現したいこと
以下のリスト

D 男
E 男
A 男
C 男
B 男

から D のみを取り出すには、
どうすれば良いでしょうか。
ネットで調べた情報を元に試しているのですが、
上手くいきません。

###該当のソースコード

class Person { public string Name; public string Gender; public Person(string name, string gender) { this.Name = name; this.Gender = gender; } } class Program { static void Main(string[] args) { List<Person> People = new List<Person>(new Person[] { new Person("D", "男"), // ここの"D"のみ抽出したい new Person("E", "男"), new Person("A", "男"), new Person("C", "男"), new Person("B", "男"), }); foreach (Person a in People) { Console.WriteLine("{0} {1}", a.Name, a.Gender); } } }

###補足情報(言語/FW/ツール等のバージョンなど)
C#
visual Studio

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ループの内部で取りだして良いのなら

csarp

1using System; 2using System.Collections.Generic; 3 4namespace ConsoleApp3 5{ 6 class Person 7 { 8 public string Name; 9 public string Gender; 10 public Person(string name, string gender) 11 { 12 this.Name = name; 13 this.Gender = gender; 14 } 15 } 16 class Program 17 { 18 static void Main(string[] args) 19 { 20 21 22 List<Person> People = new List<Person>(new Person[] { 23 24 new Person("D", "男"), // ここの"D"のみ抽出したい 25 new Person("E", "男"), 26 new Person("A", "男"), 27 new Person("C", "男"), 28 new Person("B", "男"), 29 }); 30 31 32 foreach (Person a in People) 33 { 34 if (a.Name == "D") 35 { 36 Console.WriteLine("{0} {1}", a.Name, a.Gender); 37 break; 38 } 39 } 40 } 41 } 42} 43

こんな感じでしょうか?(Dがユニークである前提。ユニークでなければbreakは外してください。

LINQで行くなら

csharp

1using System; 2using System.Collections.Generic; 3using System.Linq; 4 5namespace ConsoleApp3 6{ 7 class Person 8 { 9 public string Name; 10 public string Gender; 11 public Person(string name, string gender) 12 { 13 this.Name = name; 14 this.Gender = gender; 15 } 16 } 17 class Program 18 { 19 static void Main(string[] args) 20 { 21 22 23 List<Person> People = new List<Person>(new Person[] { 24 25 new Person("D", "男"), // ここの"D"のみ抽出したい 26 new Person("E", "男"), 27 new Person("A", "男"), 28 new Person("C", "男"), 29 new Person("B", "男"), 30 }); 31 32 33 foreach (var a in People.Where(x=>x.Name=="D")) 34 { 35 Console.WriteLine("{0} {1}", a.Name, a.Gender); 36 } 37 } 38 } 39} 40

このような形になるかと。
表示ではなく、抽出したいならコレクションなり変数なりを用意すれば良いかと思います。

投稿2017/05/25 06:31

Tokeiya3

総合スコア260

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okiasu

2017/05/25 23:58

ありがとうございます! foreachの内部で取り出してみます!
guest

0

とりあえず LINQ について調べて下さい。過去の一連の質問のいくつかはそれで答えが出るし、未来の質問にもそれで答えが出ます。

投稿2017/05/25 06:17

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これも取れますか?
var a = People.find(p=>p.Name=="D");

投稿2017/05/26 13:00

kentaro_inoue

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tokeiya3

2017/05/26 13:22

NameプロパティがUniqueなら、問題ないですが、複数あるなら最初の一個しか取れないので状況により可否は変わるかと。 あと、LINQと異なり、即時評価なので、その辺をどのように受け取るかによるかと思います
kentaro_inoue

2017/05/29 20:05

おっしゃる通りNameなので重複はあり得ますね。 即時評価、遅延評価は用途によると思いますが考慮すると良いですね。 ご指摘ありがとうございます。 勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問