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

わんくま同盟

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

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

ツリー一括表示

GenericListからArrayListに変換 /Yuya (19/07/05(Fri) 15:41) #91554
Re[1]: GenericListからArrayListに変換 /Hongliang (19/07/05(Fri) 15:53) #91556
  └ Re[2]: GenericListからArrayListに変換 /Yuya (19/07/05(Fri) 16:07) #91558
    └ Re[3]: GenericListからArrayListに変換 /Hongliang (19/07/05(Fri) 16:16) #91559
      └ Re[4]: GenericListからArrayListに変換 /Yuya (19/07/05(Fri) 16:28) #91560
        ├ Re[5]: GenericListからArrayListに変換 /PANG2 (19/07/05(Fri) 17:12) #91564
        ├ Re[5]: GenericListからArrayListに変換 /魔界の仮面弁士 (19/07/05(Fri) 17:07) #91563
        └ Re[5]: GenericListからArrayListに変換 /Hongliang (19/07/05(Fri) 17:03) #91562


親記事 / ▼[ 91556 ]
■91554 / 親階層)  GenericListからArrayListに変換
□投稿者/ Yuya (1回)-(2019/07/05(Fri) 15:41:58)

分類:[C#] 

C#で、GenericList(System.Object)をArrayListに変換したいのですが、方法はございますか?
[ □ Tree ] 返信 編集キー/

▲[ 91554 ] / ▼[ 91558 ]
■91556 / 1階層)  Re[1]: GenericListからArrayListに変換
□投稿者/ Hongliang (837回)-(2019/07/05(Fri) 15:53:19)
こうですか?
ArrayList arrayList = new ArrayList(list);
[ 親 91554 / □ Tree ] 返信 編集キー/

▲[ 91556 ] / ▼[ 91559 ]
■91558 / 2階層)  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"] + ", ";
}

[ 親 91554 / □ Tree ] 返信 編集キー/

▲[ 91558 ] / ▼[ 91560 ]
■91559 / 3階層)  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. もうちょっと質問の背景を書いていただけると助かります。
[ 親 91554 / □ Tree ] 返信 編集キー/

▲[ 91559 ] / ▼[ 91564 ] ▼[ 91563 ] ▼[ 91562 ]
■91560 / 4階層)  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の薬効評価を取り出したいです。
[ 親 91554 / □ Tree ] 返信 編集キー/

▲[ 91560 ] / 返信無し
■91564 / 5階層)  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);
}

[ 親 91554 / □ Tree ] 返信 編集キー/

▲[ 91560 ] / 返信無し
■91563 / 5階層)  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();
[ 親 91554 / □ Tree ] 返信 編集キー/

▲[ 91560 ] / 返信無し
■91562 / 5階層)  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 + ", ";
}

[ 親 91554 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -