1

にランダムな数を入れる効果を実現したいのですが、IListのタイプを取得する方法がわからないようです。IListまたはのタイプに単純にキャストすることはできません。 intdecimalConsole.ReadLine()IList

public void RandomizeIList<T>(IList<T> list)
{
    randomNum = new Random();
    T typeRead = 0, typeReadSeed = 0;
    String strRead = "", strReadSeed = "";
    Console.WriteLine("How many {0}s do you want to randomly generate?", list.GetType());
    T strRead = (list.GetType())Console.ReadLine();
    Console.WriteLine("What's the limit of the randomly generated {0}s?", list.GetType());
    Int32.TryParse(strReadSeed, out intReadSeed);
    for (int i = 0; i < strRead; i++)
    {
        list[i] = randomNum.Next(intReadSeed);
    }
}
4

1 に答える 1

2

構文的に必要なものは次のとおりです。

T strRead = (T)Console.ReadLine();

ただし、文字列Console.ReadLine のみを返すため、このキャスト(およびジェネリックスの使用)は意味がありません。(文字列IList<string>だと思うので)を使用するか、 (リストにsを追加するので)を使用する必要があります。いずれにせよ、あなたは何もしていないので、あなたが何を達成しようとしているのかは非常に不明確です。TIList<int>intstrRead

コメントごとに更新

確かに、文字列を任意のタイプに変換できます。Convertフレームワークは、クラスなど、このためのいくつかのユーティリティを提供します。

T strRead = (T)(object)Convert.ChangeType(Console.ReadLine(), typeof(T));

これは単純なタイプで機能します。たとえば、Convertをに変換するためにstring使用できます。intただし、このクラスを使用して任意の文字列を任意の型に変換することはできないことは言うまでもありません。そのためには、独自の型変換フレームワークを検討する必要があります。おそらく、の動作Convertを暗黙的および明示的な変換などと組み合わせます。これは、特定の型の文字列表現がその型の特性に完全に依存していることは明らかだからです。 。

于 2013-03-26T23:09:04.267 に答える