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

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

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

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

Q&A

解決済

1回答

7309閲覧

DtoからDtoに任意の項目を代入したい

Takahiro310

総合スコア30

C#

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

0グッド

0クリップ

投稿2016/11/16 08:40

編集2016/11/16 08:41

※※環境は C#.NET2.0 です。Linq等便利なモノが使えません…
※※今回の処理はかなり回りくどい方法を取っていることを自覚しています。二つのDtoを用いているのは現在の仕様上仕方のないことなのだとご理解いただけると幸いです。

AbcDtoとXyzDtoが以下のように定義されているとします。

C#

1public class AbcDto 2{ 3 public string a { get; set; } 4 public string b { get; set; } 5 public string c { get; set; } 6 public string same1 { get; set; } 7 public string same2 { get; set; } 8 public string same3 { get; set; } 9 public string same4 { get; set; } 10 public string same5 { get; set; } 11} 12public class XyzDto 13{ 14 public string x { get; set; } 15 public string y { get; set; } 16 public string z { get; set; } 17 public string same1 { get; set; } 18 public string same2 { get; set; } 19 public string same3 { get; set; } 20 public string same4 { get; set; } 21 public string same5 { get; set; } 22}

上記のように、AbcDtoとXyzDtoには同じ内容を表す項目same1,same2,...,same5があります
また、AbcDtoのすべての要素にはすでに値が入っており、XyzDtoのすべての要素はnullとします。
このとき、AbcDtoからXyzDtoに任意のsame1~same5の値を渡すメソッドPass(AbcDto abc, XyzDto xyz)を実装することを考えます
ただし、same1~same5の内どの値を渡すかは呼ばれる段階までわかりません
このような関数を実装する手段をご教授願います。

わたしが思いついたのは配列target[5]をPass()の引数に追加し、0,1でsame1~same5のうちどれを渡すかを制御するというものです。しかしこれはあまり可読性が高いように思えません。
もっと見る人が分かりやすい方法はありますでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

私なら(型が同じという前提であれば)中に配列を保持しておいて、それをプロパティから呼び出すようにします。
長いので3~5は省略で。後は配列を直接やりとりする関数を定義してやれば、プロパティの値も勝手に変わります。

C#

1enum Common 2{ 3 Same1, 4 Same2, 5 EndCommon, 6} 7 8public class AbcDto 9{ 10 private string[] data = new string[(int)Common.EndCommon]; 11 12 public string a { get; set; } 13 public string b { get; set; } 14 public string c { get; set; } 15 public string same1 { get { return data[(int)Common.Same1]; } set { data[(int)Common.Same1] = value; } } 16 public string same2 { get { return data[(int)Common.Same2]; } set { data[(int)Common.Same2] = value; } } 17} 18public class XyzDto 19{ 20 private string[] data = new string[(int)Common.EndCommon]; 21 22 public string x { get; set; } 23 public string y { get; set; } 24 public string z { get; set; } 25 public string same1 { get { return data[(int)Common.Same1]; } set { data[(int)Common.Same1] = value; } } 26 public string same2 { get { return data[(int)Common.Same2]; } set { data[(int)Common.Same2] = value; } } 27}

投稿2016/11/16 08:55

ishi9

総合スコア1294

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

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

Takahiro310

2016/11/17 00:39

なるほど。enum型なら可読性を保てそうです。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問