C#でジェネリックメソッドを作成しようとしていますが、指定された型の配列が返されます。これは私の方法は、現時点では次のようになります。この型の配列を返す型パラメータを持つメソッド
private T[] GetKeys<T>(string key, Dictionary<string, object> obj) where T : new()
{
if (obj.ContainsKey(key))
{
object[] objs = (object[])obj[key];
T[] list = new T[objs.Length];
for (int i = 0; i < objs.Length; i++)
{
list[i] = (T)Activator.CreateInstance(
typeof(T),
new object[] {
(Dictionary<string, object>)objs[i]
});
}
return list;
}
else
{
return null;
}
}
このクラスは内部的に使用し、私はすでにクラスは<T>
に入れられますか知っているライブラリを使用して利用できませんされています。すべてのクラスはコンストラクタ内で同じパラメータを持ちます。しかし、このコードをコンパイルする前に、パラメータを持たないパブリックコンストラクタを与える必要がありました。今私がActivator.CreateInstance
行になると、私はConstructor on type 'MyNamespace.MyClass+MyOtherClass' not found
と言うエラーが出ます。 MyClass
は上記のメソッドを含むクラスです。 MyOtherClass
は、T
として渡されるクラスです。
ありがとうございましたありがとうございました!あなたはこれを使用していないので
T t = new T();
:これはT上の制約
private T[] GetKeys<T>(...) where T : new()
↑
あなたはメソッド本体に次のようなコードを記述することができます:
理想的には、コンストラクタを内部にしたいと思います。しかし、私はGetConstructorに必要な追加パラメータの使い方に慣れていないので、現時点ではpublicコンストラクタを選択すると思います。 –