C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

GenericListからArrayListに変換

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■91554 / inTopicNo.1)  GenericListからArrayListに変換
  
□投稿者/ Yuya (1回)-(2019/07/05(Fri) 15:41:58)

分類:[C#] 

C#で、GenericList(System.Object)をArrayListに変換したいのですが、方法はございますか?
引用返信 編集キー/
■91556 / inTopicNo.2)  Re[1]: GenericListからArrayListに変換
□投稿者/ Hongliang (837回)-(2019/07/05(Fri) 15:53:19)
こうですか?
ArrayList arrayList = new ArrayList(list);
引用返信 編集キー/
■91558 / inTopicNo.3)  Re[2]: GenericListからArrayListに変換
□投稿者/ Yuya (3回)-(2019/07/05(Fri) 16:07:14)
No91556 (Hongliang さん) に返信
> こうですか?
> ArrayList arrayList = new ArrayList(list);

そのArrayListのデータを取得しようとすると、

角かっこ [] 付きインデックスを '<>f__AnonymousType70<object,object,object>' 型の式に適用することはできません

とエラーになってしまいます。
解決方はございますでしょうか?

ちなみにそのリストをforeachでループして使用しています。
下記のように記述しています。


foreach (dynamic data in arrayList)
{
aaa += (string)data["xxx"] + ", ";
}

引用返信 編集キー/
■91559 / inTopicNo.4)  Re[3]: GenericListからArrayListに変換
□投稿者/ Hongliang (838回)-(2019/07/05(Fri) 16:16:01)
2019/07/05(Fri) 16:20:19 編集(投稿者)

1. なぜArrayListに変換するのでしょうか。
 他のメソッドの引数で要求されるから仕方なくということでもない限り、List<object>で十分なはずですが。

2. List<object>に格納されている個々の要素はどうなっているのでしょうか。

<追記>
3. もうちょっと質問の背景を書いていただけると助かります。
引用返信 編集キー/
■91560 / inTopicNo.5)  Re[4]: GenericListからArrayListに変換
□投稿者/ Yuya (4回)-(2019/07/05(Fri) 16:28:08)
2019/07/05(Fri) 16:28:40 編集(投稿者)
No91559 (Hongliang さん) に返信
> 2019/07/05(Fri) 16:20:19 編集(投稿者)
>
> 1. なぜArrayListに変換するのでしょうか。
>  他のメソッドの引数で要求されるから仕方なくということでもない限り、List<object>で十分なはずですが。
>
> 2. List<object>に格納されている個々の要素はどうなっているのでしょうか。
>



1>Listでも問題はないですが、データは動的に増減します。

2>[0]{ ExTypeId = 1, ExTypeName = "薬効評価", ExTypeNameEn = "MedicinalEffect" }

今回はExTypeNameの薬効評価を取り出したいです。
引用返信 編集キー/
■91562 / inTopicNo.6)  Re[5]: GenericListからArrayListに変換
□投稿者/ Hongliang (839回)-(2019/07/05(Fri) 17:03:45)
2019/07/05(Fri) 17:04:35 編集(投稿者)
> 1>Listでも問題はないですが、データは動的に増減します。
?
List<object>も可変長で、AddもRemoveもできます。

> 2>[0]{ ExTypeId = 1, ExTypeName = "薬効評価", ExTypeNameEn = "MedicinalEffect" }
> 
> 今回はExTypeNameの薬効評価を取り出したいです。

これは匿名型ですか?(new { ExTypeId = ... } と記述する奴)
dynamicとかでこねくり回す必要があるなら、匿名型ではなく、
class定義を書いた方が便利だと思います。
そうすればList<クラス>を使用できて、
foreach (クラス item in list) {
    string name = item.ExTypeName;
}
と記述できるようになりますし。

それはそれとして、こんな感じになりますかね。
foreach (dynamic data in list)
{
    aaa += (string)data.ExTypeName + ", ";
}

引用返信 編集キー/
■91563 / inTopicNo.7)  Re[5]: GenericListからArrayListに変換
□投稿者/ 魔界の仮面弁士 (2225回)-(2019/07/05(Fri) 17:07:14)
No91560 (Yuya さん) に返信
> 1>Listでも問題はないですが、データは動的に増減します。

List<dynamic> でも ArrayList でも、データの増減は可能ですね。


> 2>[0]{ ExTypeId = 1, ExTypeName = "薬効評価", ExTypeNameEn = "MedicinalEffect" }
> 今回はExTypeNameの薬効評価を取り出したいです。


であれば、こうなのでは。

var sb = new StringBuilder();
foreach (dynamic data in コレクション)
{
 sb.Append(data.ExTypeName + ", ");
}
string aaa = sb.ToString();
引用返信 編集キー/
■91564 / inTopicNo.8)  Re[5]: GenericListからArrayListに変換
□投稿者/ PANG2 (310回)-(2019/07/05(Fri) 17:12:03)
2019/07/05(Fri) 18:50:56 編集(投稿者)

List<object>で問題ないような。

List<object> list
= new List<object>() {
new Dictionary<string, string>() { { "X", "1" } },
new SortedDictionary<string, string>() { { "X", "2" } },
};

foreach (dynamic data in list) {
MessageBox.Show(data["X"]);
}

追記

もしかしてこうゆうこと?
インデクサではなく普通に書けばよい。

List<object> list
= new List<object>() {
new {X = "1"},
new {X = "2"},
};

foreach (dynamic data in list) {
MessageBox.Show(data.X);
}

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ