前提・実現したいこと
もともとひとつのファイルでループしていたものを複数のクラスに分けています。
ループで回す実装を書いているのですが、
もっとスマートにかける方法はないかと思いました。
intAやworkAなどのように処理前に設定し、処理終わりに取得しています。
発生している問題・エラーメッセージ
コードが冗長になっている。
該当のソースコード
C#
1 2public class base 3{ 4 public void main(){ 5 public int intA; 6 public int intB; 7 public string strC; 8 9 var clsa = new classA(); 10 //dtはDataTable型でDBより取得したデータ 11 foreach(var dr in dt.rows()){ 12 if(drのキー変更) 13 { 14 clsa.workA = intA; 15 clsa.workB = intB; 16 clsa.workC = strC; 17 clsa.reg(); 18 intA = clsa.workA; 19 intB = clsa.workB; 20 strC = clsa.workC; 21 } 22 clsa.add(dr); 23 } 24 clsa.workA = intA; 25 clsa.workB = intB; 26 clsa.workC = strC; 27 clsa.reg(); 28 intA = clsa.workA; 29 intB = clsa.workB; 30 strC = clsa.workC; 31 } 32} 33 34 35public class classA{ 36 public int workA { get; set; } 37 public int workB { get; set; } 38 public string workC { get; set;} 39 private classB clsb; 40 private classC clsc; 41 42 public void reg() 43 { 44 clsb.workA = workA; 45 clsb.workB = workB; 46 clsb.workC = workC; 47 clsb.reg(); 48 workA = clsb.workA; 49 workB = clsb.workB; 50 workC = clsb.workC; 51 52 clsc.reg(); 53 } 54 public void add(DataRow dr) 55 { 56 if(dr["区分"] == 1) 57 { 58 clsb = new classB(dr); //コンストラクタでdr設定 59 } 60 else 61 { 62 clsc = new classC(dr); //コンストラクタでdr設定 63 } 64 } 65} 66 67public class classB{ 68 public int workA { get; set; } 69 public int workB { get; set; } 70 public string workC { get; set;} 71 72 public datarow dr { get; set; } 73 74 public void reg() 75 { 76 //変数変更 77 var a = getA(); //DBからa取得 78 if(workA != a){ 79 workA = a; 80 } 81 var b = getB(); //DBからb取得 82 if(workB != b){ 83 workB = b; 84 } 85 //drを使用した処理 86 } 87} 88public class classC{ 89 90 public datarow dr { get; set; } 91 92 public void reg() 93 { 94 //drを使用した処理 95 } 96}
試したこと
補足情報(FW/ツールのバージョンなど)
VS pro 2015
Visual C# 2015
ループをスマートにしたい、ということなので、多分LINQを使えば良いと思いますが、
サンプルコードが冗長ですし、何がしたいコードなのかも分からないので、改善がしづらいです。
`int workA`というのは何かの仕事の結果でしょうか、それとも仕事のIDでしょうか?単なるサンプルコードにしても、もう少し"カラフル"な名前にしてくれたほうが理解しやすいです。
あなたの回答
tips
プレビュー