直列つなぎ。 -とある発達障害者の記録

知識と知識を繋ぐためのblog。 広汎性発達と診断されました。ぜんぜん役に立ってないけど。月収13万円、家賃4万円で生活するひつじ人間。

C# ジェネリックとIEnumerableのサンプルコード解析と理解

https://code.msdn.microsoft.com/10-C-6d9ce545



        public static void Swap<T>(ref T LeftParam, ref T RightParam)
        // ジェネリック型を指定。入れ替えのため、ref T で渡す
        {
            T temp;
            // パラメータの左側と右側を入れ替える
            temp = LeftParam;
            LeftParam = RightParam;
            RightParam = temp;
        }


        private void button1_Click(object sender, EventArgs e)
        {

            // 変数にテキストボックスからの値を設定
            string a = this.textBox1.Text;
            string b = this.textBox2.Text;

            // メソッド呼び出し前の表示
            MessageBox.Show("a=" + a + " , b=" + b);

            // 引数に string 型を指定して Swap メソッドの呼び出し
            Swap<string>(ref a, ref b);

            // 呼び出し結果の表示
            MessageBox.Show("a=" + a + " , b=" + b);
        }

      
 分かりやすい。
 当然ながらstring型入れてもOK。




インターフェースの実装とジェネリック(Generic)を使ったJag配列。
http://yohshiy.blog.fc2.com/blog-entry-211.html

実行できなかったので質問してみた。
 いまの自分では検討も付かなかった。


  サンプルコードってそのままだと実行出来ないことが多いんだが何故なんだろう。
 わざわざ実行しなくてもプログラマなら問題ないのだろう、多分。あっさり回答貰えたし。
 アルゴリズムを理解できるように。



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)
    {
//教えて頂いた部分
 

//挿入されるリストを作る List<TSource> list = new List<TSource>(); //1個目の要素を追加


list.Add(val);
    //2個目以降の要素を追加
    list.AddRange(restvals);
    //作成したリストを追加する
    this._list[row] = list;
    return true;

 } 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 = {0}", 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))); } }
 これですべて滞りなく実行させる事が出来た。
 

関連記事
スポンサーサイト

 C#

0 Comments

Leave a comment