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

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

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

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

Q&A

解決済

4回答

1314閲覧

インスタンスのフィールド達を1つのリストにまとめたい

nyahonyaho

総合スコア83

C#

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

0グッド

0クリップ

投稿2017/04/19 03:13

編集2017/04/19 03:17
class Program { static void Main(string[] args) { Person p = new Person(); //各フィールドのセット p.age = 60; ・ ・ } } public class Person { public string name { get; set; } public int age { get; set; } public int weight { get; set; } public string country { get; set; } }

↑から例えば
[マサオ,60,71,ブラジル] のようなリストを、
TypeOf・GetMembers等を駆使していっぺんに作ろうとしているのですがうまくいきません。
おとなしく1つずつリストにaddしていくべきでしょうか

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

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

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

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

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

kiichi54321

2017/04/19 03:19

意味がわかりません。もう少し詳しく書いてください
guest

回答4

0

こんな感じですか?

C#

1var aPerson = new Person 2{ 3 Age = 60, 4 Country = "Japan", 5 Name = "Jon", 6 Weight = 100 7}; 8 9var myList = aPerson.GetType().GetProperties() 10 .Select(p => p.GetValue(aPerson)) 11 .ToList();

PS.プロパティ名は大文字から

投稿2017/04/19 03:42

hihijiji

総合スコア4150

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

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

0

ベストアンサー

これがやりたいのですかね?
たぶん、式木でやりましょう!という人がナイスなコードをそのうち書いてくれるはず。

public class Person { public string name { get; set; } public int age { get; set; } public int weight { get; set; } public string country { get; set; } public List<string > ToList() { return this.GetType().GetProperties().Select(n => n.GetValue(this).ToString()).ToList(); } }

投稿2017/04/19 03:32

kiichi54321

総合スコア1984

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

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

KSwordOfHaste

2017/04/19 03:56 編集

残念ながらリフレクションが返すプロパティーの順序がどうなるかは保証がないので今一つこうしたコードは使いにくいですよね… --- ところで「式木」を初めて知りました。こんなのがあるんですね。ビックリです。
kiichi54321

2017/04/19 04:45

プロパティとの対応関係が順序依存だと良くないから、名前と対応させればいいじゃんという風にすると、 実質JSONになるので、JSONで変換すればいいのでは?とは思いますね。
guest

0

こんにちは。

リフレクションは遅いのでなるべく使わない方が良いですが、何か理由があるのでしょうか?
特に理由がないのでしたら、このケースは普通にList<Object>へAddしていく関数を作るのが妥当なように感じます。

Personに含まれるメンバーが変わった時に、その関数を修正したくない場合は、リフレクションを使うしかないですけどね。
その場合は、TypeのInvokeMember()でGetPropertyを使ってプロパティを取り出すことが可能です。

投稿2017/04/19 03:42

Chironian

総合スコア23272

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

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

0

質問の意味が不明ですが・・・

以下のようにするのは目的に会いませんか?

Person p = new Person() { name = "マサオ", age = 60, weight = 71, country = "ブラジル" };

投稿2017/04/19 03:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問