Utworzyć wystąpienie typu ogólnego, którego konstruktor wymaga parametru?

Utworzyć wystąpienie typu ogólnego, którego konstruktor wymaga parametru?

Dodatkowo prostszy przykład:

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

Zwróć uwagę, że użycie ograniczenia new() na T jest tylko po to, aby kompilator sprawdzał obecność publicznego konstruktora bez parametrów w czasie kompilacji, rzeczywisty kod użyty do utworzenia typu to klasa Activator.

Musisz upewnić się co do konkretnego istniejącego konstruktora, a tego rodzaju wymaganiem może być zapach kodu (a raczej coś, czego powinieneś po prostu unikać w obecnej wersji w c#).


Nie możesz użyć żadnego sparametryzowanego konstruktora. Możesz użyć konstruktora bez parametrów, jeśli masz „where T : new() " ograniczenie.

To ból, ale takie jest życie :(

Jest to jedna z rzeczy, którą chciałbym rozwiązać za pomocą „interfejsów statycznych”. Byłbyś wtedy w stanie ograniczyć T tak, aby zawierał statyczne metody, operatory i konstruktory, a następnie je wywołać.


TAk; zmień swoje miejsce pobytu:

where T:BaseFruit, new()

Działa to jednak tylko w przypadku bezparametrowego konstruktorzy. Będziesz musiał mieć inne sposoby ustawienia swojej właściwości (ustawienie samej właściwości lub coś podobnego).