:クラス内のプロパティの型に基づいてC#generic辞書を動的に作成するにはどうすればよいですか?私は動的に以下のクラスのプロパティのタイプに基づいて、一般的な辞書を作成しようとしています
public class StatsModel
{
public Dictionary<string, int> Stats { get; set; }
}
はのは、プロパティは変数「のプロパティタイプ」にしていることを割り当てられている統計のSystem.Typeをを想定してみましょうその型が汎用辞書である場合、IsGenericDictionaryメソッドはtrueを返します。私はすでに作成されたオブジェクトが、私はそのタイプのジェネリック辞書にキャストしたい一般的な辞書であることを知っているので
// Note: property is a System.Reflection.PropertyInfo
Type propertyType = property.PropertyType;
if (IsGenericDictionary(propertyType))
{
object dictionary = Activator.CreateInstance(propertyType);
}
:私は、動的に同じタイプの一般的な辞書のインスタンスを作成するためにActivator.CreateInstanceを使用します引数はプロパティタイプの汎用引数と同じです:
Type[] genericArguments = propertyType.GetGenericArguments();
// genericArguments contains two Types: System.String and System.Int32
Dictionary<?, ?> = (Dictionary<?, ?>)Activator.CreateInstance(propertyType);
これは可能ですか?
通常の辞書のメソッドへのアクセスは、私が探していたものです。私はIDictionaryにキャストします、特に私はハックが好きではありません;-)非常にMarcありがとう! – Jeroen
私はget:generic型 'System.Collections.Generic.IDictionary'は2つの型引数を必要とします –
tdc
@tdcコードファイルの先頭に 'using System.Collections;'指示文を追加します –