-1

ArrayList オブジェクトをパラメーターとして受け取るメソッドがあります。

次に、この arrayList を文字列配列に変換しようとしましたが、InvalidCastException が発生しました。

ArrayList には 7 つの乱数が含まれています。それらはオブジェクト型であるため、文字列にキャストするのに問題はないと思います。

これは私が呼び出したメソッドです

p.matches(winningNumber);

public void matches(ArrayList al)
    {
        try
        {
            string nameFile;

            string[] winningNumber = (string[])al.ToArray(typeof(string));

            Console.WriteLine("Please enter the name of the file you want to Read from");
            nameFile = Console.ReadLine();

例外が発生するのは、キャストを試みた場合です。

4

4 に答える 4

3

文字列の配列に変換するには、要素自体も文字列である必要があるため、この例外が発生します。ただし、LINQを使用してそれを行うことができます。

string[] winningNumber = al.Cast<object>().Select(o => o.ToString()).ToArray();

sを処理するには、sをチェックする条件付きまたは条件付きnullで置き換えます。o.ToString()""+onull

于 2012-12-29T14:38:28.910 に答える
1

変化する

string[] winningNumber = (string[])al.ToArray(typeof(string));

string[] winningNumber = al.Cast<object>.Select(x=> x==null ? string.Empty : x.ToString()).ToArray();

文字列ではないアイテムがある場合は、Enumerable.OfTypeを使用できます。文字列以外のタイプは無視されます。

string[] winningNumber = al.OfType<string>().ToArray();
于 2012-12-29T14:37:25.803 に答える
1
string[] winningNumber = al.Cast<object>.Select(x=>Convert.ToString(x)).ToArray();
于 2012-12-29T14:37:51.353 に答える
1

ToArray を呼び出す前にEnumerable.Castを使用する必要があります

string[] winningNumber = al.Cast<string>().ToArray();
于 2012-12-29T14:40:40.453 に答える