1

クラスがある場合:

class Useless
{
    private string _message ;
    public Useless(string message)
    {
        _message = message;
    }
}

class UselessFactory<T> where T : new()
{
    public Useless CreateUseless(string msg)
    {
        return new T(msg);
    }
}

次のように、パラメーターを使用して T をインスタンス化できないのはなぜですか?

return (Useless)Activator.CreateInstance(typeof(T), msg);
4

3 に答える 3

2

新しい制約は、ジェネリック クラス宣言内のすべての型引数に、パラメーターなしのパブリック コンストラクターが必要であることを指定します。

ドキュメントから

考えられる回避策 (同じではない)

Messagepublic で変更可能なプロパティを作成すると、次のことができます。

class UselessFactory<T> where T : UselessBase, new()
{
    public T CreateUseless(string msg)
    {
        return new T() { Message = msg };
    }
}
于 2013-04-23T07:58:04.197 に答える
1

次のことができます。

return (T)Activator.CreateInstance(typeof(T), new object[] { msg });

この質問から得ました: https://stackoverflow.com/a/731637/1522991

于 2013-04-23T08:06:35.757 に答える