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

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

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

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

解決済

IEnumerableを使ったjag配列に要素を追加したい。

sheephuman
sheephuman

総合スコア0

C#

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

1回答

0評価

0クリップ

6283閲覧

投稿2016/10/02 10:53

C#勉強中の初心者です。

[C# インターフェース - IEnumerable(T) ](http://yohshiy\.blog\.fc2\.com/blog-entry-211\.html\)

上記リンクのサンプルで、何故か

C#

public bool Add\(int row, TSource val, params TSource\[\] restvals\) { // : }

となっておりまして、ここに本来ジャグ配列の要素を追加するためのメソッドが必要なのだと思いますが、どうすればいいか教えて頂けませんか。調べても分かりません。

サンプルコード

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メソッドが機能してないように見えます。

![イメージ説明](12a2873dfe5d6bc11ca00275d1adafbf.jpeg)

ハンドルされていない例外: System.InvalidOperationException: シーケンスに要素が含まれていません
場所 System.Linq.Enumerable.Max(IEnumerable`1 source)
場所 Program.Main() 場所 D:\code\ConsoleApp5\src\ConsoleApp5\Program.cs:行 79
注: 79行目が jagary.Max()); でした。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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