C#勉強中の初心者です。
上記リンクのサンプルで、何故か
C#
1 public bool Add(int row, TSource val, params TSource[] restvals) 2 { 3 // : 4 } 5 6
となっておりまして、ここに本来ジャグ配列の要素を追加するためのメソッドが必要なのだと思いますが、どうすればいいか教えて頂けませんか。調べても分かりません。
サンプルコード
using System; using System.Collections; using System.Collections.Generic; using System.Linq; class JaggedArray<TSource> : IEnumerable<TSource> { System.Collections.IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } private List<TSource>[] _list; public JaggedArray(int rowmax) { _list = new List<TSource>[rowmax]; } public int Add(int row, int val, params int[] restvals) { return; // : } public IEnumerator<TSource> GetEnumerator() { foreach (List<TSource> sublist in _list) { if (sublist != null) { // 子側の配列をイテレート foreach (TSource val in sublist) { yield return val; } } } } } class Program { static string Dump<Tsource>(IEnumerable<Tsource> source) { return "{" + string.Join(", ", source) + "}"; } static void Main() { JaggedArray<int> jagary = new JaggedArray<int>(5); jagary.Add(0, 1); jagary.Add(2, 1, 2, 3, 4); jagary.Add(3, 1, 2); jagary.Add(4, 5); foreach (int it in jagary) { Console.Write("{0} ", it); } Console.WriteLine("\n"); // LINQ Console.WriteLine("Count = {0}", jagary.Count()); Console.WriteLine("3 Contains ? = {0}", jagary.Contains(3)); Console.WriteLine("Max = {1}", jagary.Max()); Console.WriteLine("Sum = {0}", jagary.Sum()); Console.WriteLine("Average = {0}", jagary.Average()); Console.WriteLine("ToArray = {0}", Dump(jagary.ToArray())); Console.WriteLine("(Source) / 2.0 = {0}", Dump(jagary.Select(it => it / 2.0))); } }
上記のコードをVisual Studio2015で走らせると以下のようなエラーが出まして、どうもbool Addメソッドが機能してないように見えます。
ハンドルされていない例外: System.InvalidOperationException: シーケンスに要素が含まれていません
場所 System.Linq.Enumerable.Max(IEnumerable`1 source)
場所 Program.Main() 場所 D:\code\ConsoleApp5\src\ConsoleApp5\Program.cs:行 79
注: 79行目が jagary.Max()); でした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/02 11:39
2016/10/02 12:07
2016/10/02 12:09