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).