1

重複の可能性:
C# で ArrayList を文字列配列 (string[]) に変換する

string[]以下は、私が試しているコードです。エラーが発生します:

ソース配列の少なくとも 1 つの要素が、宛先配列型にキャストできませんでした。

ArrayList myArrayList = new ArrayList();
foreach (DataRow dtRow in DtSet.Tables[0].Rows)
{
    myArrayList.Add(dtRow);
}

string[] myStringArray = (string[])myArrayList.ToArray(typeof(string));
4

7 に答える 7

5

まだ .NET 1.1 を使用していますか。List<T>または、の代わりにtyped を使用しないのはなぜArrayListですか?

DataRowまず、 aを to にキャストできませんStringDataRow のすべてのフィールドを文字列にキャストできます。

Linqを使用できる場合は、次のコードを使用してString[]、各フィールドがコンマで区切られているすべての行フィールドを取得できます。

String[] rowFields = DtSet.Tables[0]
                    .AsEnumerable()
                    .Select(r => string.Join(",", r.ItemArray));
                    .ToArray();
于 2012-07-16T09:32:12.093 に答える
2

多数のDataRowオブジェクトを に配置していArrayListます。DataRows は s ではありませんstring。だから:それはうまくいきません。せいぜい、おそらく を取得できますが.ToString()、率直に言って、それはそれほど役に立ちません-すべての行が単に言うSystem.Data.DataRowからです(オーバーライドしないためToString().行う。

コメントの議論に基づく例:

DataTable table = ...
string[] strings = new string[table.Rows.Count];
int idx = 0;
foreach(DataRow row in table.Rows)
{
    StringBuilder sb = new StringBuilder();
    object[] cells = row.ItemArray;
    for(int i = 0 ; i < cells.Length ; i++)
    {
        if (i != 0) sb.Append(',');
        sb.Append('"').Append(cells[i]).Append('"');
    }
    strings[idx++] = sb.ToString();
}
于 2012-07-16T09:26:09.393 に答える
2

DataRow (型)​​ を取り、それを ArrayList に追加して、それが文字列であることを期待することはできません。DataRow は、オブジェクトとオブジェクト データに関する無数の情報を持つオブジェクトです。

foreach(DataRow dtRow in dtSet.Tables[0].Rows)
{
    myArrayList.Add(dtRow["UserName"].ToString());
}

string[] myArray = myArrayList.ToArray(typeof(string));
于 2012-07-16T09:27:40.453 に答える
1

ArrayList要素の型がですDataRow。それを s の配列に変換しようとしていstringます。ADataRowは a ではないstring(ダウンキャストでも 1 にならない) ため、それはできません。

文字列の配列が最終的に必要なものである場合はToStringArrayList.

(また、Tim Schmelter がコメントで述べたように、実際にはList<T>for someを使用する必要があります。Tおそらく、コードが最終的にどのように見えるかに応じて、 ではなくstringまたはのいずれかです。)DataRowArrayList

于 2012-07-16T09:26:43.753 に答える
1

arrayList の各項目は DataRow 型であり、文字列にキャストすることはできません。

代わりに、行の内容を表す文字列を作成し、その文字列をリストに追加する必要があります。

myArrayList.Add(dtRow["CustomerName"]);
于 2012-07-16T09:28:14.150 に答える
0
ArrayList myArrayList = new ArrayList();

myArrayList.Add("as");
myArrayList.Add("as");
myArrayList.Add("as");
myArrayList.Add("as");
myArrayList.Add("as");            
myArrayList.Add("as");

string[] array = myArrayList.ToArray(typeof(string)) as string[];
foreach (var item in array)
{
    Console.WriteLine(item.ToString());                
}

出力:

as
as
as
as
as
as
于 2012-07-16T09:42:14.970 に答える
0

これを試しましたか:

string[] array = myArrayList.ToArray(typeof(string)) as string[];
于 2012-07-16T09:25:28.190 に答える