4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ArrayListで遊ぶ

Last updated at Posted at 2018-05-06

今では使われることも少ないArrayList。何とかして使い道が無いか考えて見ました。

ArrayListは動的にサイズを増減できる配列であり、何でもぶっこめる一件便利な奴ですが、要素に追加したものは問答無用でobjectになってしまうので、要素を取り出して使う時は元の型にキャストしないといけません。値型を入れれば当然ボックス化も発生します。
これらの理由から今はジェネリックで型安全のList<T>にその座を奪われています。

さて、今回はその何でもぶっこめる特性を活かし、要素の型当てクイズゲームを作って見ました。
ArrayListの要素に色んな型のオブジェクトを追加して、ランダムでその中から要素を選び、その型名が何であるか当てるという内容になっています。

ArrayListGame.cs
using System;
using System.Collections;
using System.Linq;
namespace ArrayListGame
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            //適当に色んな型のオブジェクトをぶっこむ
            var list = new ArrayList();
            list.Add("");
            list.Add(0);
            list.Add(new DateTime());
            list.Add(new Exception());

            //答えとなる型をランダムで選ぶ
            Type answerType = list[new Random().Next(0, list.Count - 1 )].GetType();

            //ランダムで選んだ型のメンバから公開メソッドの名前のみを抽出、オーバーロードの重複はまとめる。
            var methods = answerType.GetMethods().Where(x => x.IsPublic).Select(x => x.Name).Distinct().ToList();

            //その中からランダムでヒントとなるメソッド名を一つ取得
            string hintMethodName = methods[new Random().Next(0, methods.Count - 1)];

            Console.WriteLine($"問題 : このオブジェクトは「{hintMethodName}」メソッドを持っています。型名は何でしょう?");

            //ヒントを参考に答えを入力
            string answer = Console.ReadLine();

            if(answerType.Name == answer)
            {
                Console.WriteLine("正解!");
            }
            else
            {
                Console.Write($"残念!答えは「{answerType.Name}」です。");
            }

        }
    }
}

よしやってみよう!

問題 : このオブジェクトは「ToString」メソッドを持っています。型名は何でしょう?

ファッ!?

ToStringはみんな持っているからこういうのに当たったら詰む(笑)
もうちょっと工夫したら学習用プログラムとかに出来る…かも?

駄文失礼しました。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?