
No.3ベストアンサー
- 回答日時:
aからオープンジェネリック型のTypeを取得して,それがリストであるかを比較する,というような形になります。
if (a == null)
{
// a は null
}
else
{
var type = a.GetType();
if (!type.IsGenericType)
{
// a はジェネリック型ではない == List<T>でもDictionary<TK, TV>でもない
}
else
{
var openType = type.GetGenericTypeDefinition();
if (openType == typeof(List<>))
{
// a はList<T>
}
else if (openType == typeof(Dictionary<, >))
{
// a はDictionary<TK, TV>
}
else
{
// a はその他のジェネリック型
}
}
}
ご回答ありがとうございます。
詳しく書いて頂きありがとうございます。
理想とする結果がでました。
ただすいません、自分の中でもう一つ疑問がでてきまして
例えば
if (openType == typeof(Dictionary<, >))
でDictionaryを判別したあとにDictionary<, >の「<,>」の中がどんな型であろうとも
ループ処理をさせたいのですが、
if (openType == typeof(Dictionary<,>))
{
foreach (var kvp in a as Dictionary<dynamic, dynamic>/*←これが取得できない・・・*/)
{
}
}
dynamicだと無理なようなのですが、これはどのように記述したら
列挙(ループ)可能な処理ができるようになるのでしょうか?
自分としてはDictionaryの<,>の中の型の調べ方すら分からないのですが、
もしお分かりであればアドバイス頂けないでしょうか?
No.4
- 回答日時:
.NETのジェネリックは型を保持するため,コンパイル時に型が決定している必要があります。
今回の場合,aをDictionary<dynamic, dynamic>に変換するのではなく,a自体をdynamicに変換してください。
No.3のお礼部分への例だと,
foreach (var kvp in (dynamic)a)
{
// kvp.Key / kvp.Valueを使う
}
という形になります。
コード上,全部dynamicなので,インテリセンスが使えなかったり速度の問題が出たりしますが……。
ご回答ありがとうございます。
なるほど、aそのものをdynamicに変換するんでね。
理想とする結果が得られました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
16進をASCIIコードに変換する...
-
VBAでMODE関数をつくる
-
VBA 変数名に変数を使用したい。
-
2つ目のレコードの値を取得す...
-
Redim とEraseの違いは?
-
『列名 '担当者CD' があいま...
-
VBAでアクセスDBからデータの取...
-
VB.NETにて、構造体へデータを...
-
ADOでNullフィールドの抽出
-
MDBをADO接続でINSERT・UPDATE...
-
[C#] DataGridViewでコンボボッ...
-
Access 追加クエリについて
-
DBFlute でシーケンス値取得
-
ヘッダ(*.h)に定義したテーブル...
-
「テーブルに主キーがありませ...
-
EXCELのVBAでLenB関数について
-
アクセス ステータスバーの文...
-
NULLを含む文字列の結合で...
-
フィールド名の指定でエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
WORD型をCString型に変換する方法
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
16進をASCIIコードに変換する...
-
VB6.0 String型→Long型変換方法...
-
C#で文字列を数値に変換する方法
-
バイナリデータの文字列変換(5...
-
vb6の桁数指定
-
VC++ std::stringからLPCWSTRに...
-
C#でListとDictionaryの判別方法
-
C++/CLI System::String::Fotma...
-
エクセルでメールヘッダーを解...
-
バイト型のデータをLong型に変換
-
16進コード文字列を文字列に変換
-
対数変換のついて
-
ASPでVBのFormat関数のような機...
-
Pythonの指数表記について
-
VB.NET ゼロ埋め
-
C++ 文字列変数と16進数の比較
-
2の補数の計算について
おすすめ情報