static void Main(string[] args) { var fileName = args[0]; var lines = new List <string>(); // Csvファイルの読み込み using (var sr = new StreamReader(fileName, Encoding.UTF8, false)) { string line; while ((line = sr.ReadLine()) != null) { lines.Add(line); } } // Csvのファイル一行ずつの情報を格納 // Csvのヘッダーを除くデータ部分は100行あるので、parsedArgsには100個のParsedArgsが入る var parsedArgs = new List <ParsedArgs>(); foreach (var arg in lines.Skip(1)) { parsedArgs.Add(new ParsedArgs(arg)); } int calcCount = 0; List <Triangle> triangles = new List <Triangle>(); foreach (var parsedArg in parsedArgs) { calcCount++; //クラス作成編 1 Triangle triangle = new Triangle(parsedArg.TriangleBottom, parsedArg.TriangleHeight); triangles.Add(triangle); //クラス作成編 2 System.Diagnostics.Debug.WriteLine("{0}個目:{1}", calcCount, triangle.CalcArea()); } foreach (var triangle in triangles) { calcCount++; //Linq特訓編 3 if (triangle.CalcArea() > 1000) { System.Diagnostics.Debug.WriteLine("面積1000以上の三角形が存在します。"); break; } } //Linq特訓編 4 if (triangles.Where(m => m.CalcArea() > 1000).ToList().Count > 1) { System.Diagnostics.Debug.WriteLine("面積1000以上の三角形が存在します。"); } //Linq特訓編 5 System.Diagnostics.Debug.WriteLine("面積1000以上の最初の三角形の面積は:{0}", triangles.Where(m => m.CalcArea() > 1000).FirstOrDefault().CalcArea()); //Linq特訓編 6 var test = triangles.Select((m, i) => new { area = m.CalcArea(), index = i }).Where(t => t.area > 1000).Select(m => m.index).FirstOrDefault(); System.Diagnostics.Debug.WriteLine("{0}番目", test); //Linq特訓編 7 System.Diagnostics.Debug.WriteLine("面積1000以上の最初の三角形の数は:{0}", triangles.Where(m => m.CalcArea() > 1000).ToList().Count); //Linq特訓編 8 System.Diagnostics.Debug.WriteLine("面積1000以上の最初の三角形の面積の平均は:{0}", triangles.Where(m => m.CalcArea() > 1000).Average(m => m.CalcArea())); //Linq特訓編 9 var test2 = triangles.Where(m => m.CalcArea() > 1000).OrderByDescending(m => m.CalcArea()).ToList(); test2.ForEach(m => { System.Diagnostics.Debug.WriteLine("{0}", m.CalcArea()); }); //疑似クラス作成編 System.Diagnostics.Debug.WriteLine("---疑似クラス作成編"); calcCount = 0; List <Square> squares = new List <Square>(); foreach (var parsedArg in parsedArgs) { calcCount++; //疑似クラス作成編 10 Square square = new Square(parsedArg.SquareBottom, parsedArg.SquareHeight); squares.Add(square); //疑似クラス作成編11 System.Diagnostics.Debug.WriteLine("{0}個目:{1}", calcCount, square.CalcArea()); } //疑似クラス作成編12 if (squares.Where(m => m.CalcArea() > 1000).ToList().Count > 1) { System.Diagnostics.Debug.WriteLine("面積1000以上の四角形が存在します。"); } calcCount = 0; List <Circle> circles = new List <Circle>(); foreach (var parsedArg in parsedArgs) { calcCount++; //疑似クラス作成編 13 Circle circle = new Circle(parsedArg.CircleRadius); circles.Add(circle); //疑似クラス作成編14 System.Diagnostics.Debug.WriteLine("{0}個目:{1}", calcCount, circle.CalcArea()); } //疑似クラス作成編15 if (circles.Where(m => m.CalcArea() > 1000).ToList().Count > 1) { System.Diagnostics.Debug.WriteLine("面積1000以上の円が存在します。"); } //ポリモーフィズム特訓編 CalcSuper calcSuper = new CalcSuper(); System.Diagnostics.Debug.WriteLine("ポリモーフィズム特訓編"); calcSuper.CalcAreaAll(triangles); calcSuper.CalcAreaAll(squares); calcSuper.CalcAreaAll(circles); }