Там нет ничего плохого за се с кодом у вас есть: что компилирует нормально:
class SerializableEntity<T> {
public SerializableEntity(T obj) { }
}
static class P {
public static void serialize<T>(T serializeObject) {
//this is fine...
SerializableEntity<T> entity =
new SerializableEntity<T>(serializeObject);
}
static void Main() { /*...*/ }
}
Итак, настоящий вопрос: Что компилятор говорит? Наиболее очевидным было бы, если бы оно произнесло что-то вроде:
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic type or method ' SerializableEntity<T>
'
который является нарушением «ограничения»; если это то, что вы видите, вам нужно добавить ограничения на serialize<T>
, чтобы доказать компилятору, что ограничения всегда выполняются. Например, если SerializableEntity<T>
объявлен как:
class SerializableEntity<T> where T : class
{...}
то вы просто передать это ограничение методу:
public static void serialize<T>(T serializeObject) where T : class
{...}
Следует отметить, что другие ограничения возможны, в том числе:
: class
: struct
: SomeBaseType
: ISomeInterface
: new()
'// это trouble' Что такое проблема? – I4V
Возможный дубликат [Вызов универсального метода с аргументом типа, известным только во время выполнения] (http://stackoverflow.com/questions/325156/calling-generic-method-with-a-type-argument-known-only-at -execution-time) – Habib
Я получил ошибку компиляции с этим кодом SerializableEntity entity = new SerializableEntity (serializeObject); что не так? –
mrhands