2

私は以下の一般的な方法を持っていますが、それがうまくいけばその目的を果たします!しかし、items.Add(new T(mo));コンストラクターを使用しているため、パーツはコンパイルされません。誰か助けてもらえますか?

    private List<T> Items<T>(string query) where T : new()
    {

        List<T> items = new List<T>();
        ManagementObjectCollection moc = new ManagementObjectSearcher(query).Get();

        foreach (ManagementObject mo in moc)
            items.Add(new T(mo));

        return items;
    }
4

1 に答える 1

8

where T : new()構文では、パラメーターなしのコンストラクターのみが許可されます。これを行うためのいくつかのハックがあります、そうでActivator.CreateInstanceなければうまくいくはずです。ただし、推奨されるアプローチはInit(arg)、おそらくインターフェイス(を介して指定where)を介したアクセス可能な方法です。したがって、次を使用できます。

var newObj = new T();
newObj.Init(mo);
items.Add(newObj);
于 2011-04-07T13:30:34.137 に答える