Ответ 1
Вы можете использовать это, чтобы ограничить его значениями типов:
where C: struct
Вы также указываете строку. К сожалению, строки не будут разрешены, так как они не являются типами значений.
У меня есть следующий метод с общим типом:
T GetValue<T>();
Я хотел бы ограничить T на примитивные типы, такие как int, string, float, но не тип класса. Я знаю, что я могу определить generic для типа класса следующим образом:
C GetObject<C>() where C: class;
Я не уверен, возможно ли это для примитивных типов и как это сделать.
Вы можете использовать это, чтобы ограничить его значениями типов:
where C: struct
Вы также указываете строку. К сожалению, строки не будут разрешены, так как они не являются типами значений.
На самом деле это делает работу в определенной степени:
public T Object<T>() where T :
struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
Чтобы ограничить числовые типы, вы можете получить полезные подсказки следующих образцов, определенных для класса ValueType
который вы ищете:
T GetObject<T> where T: struct;
Нет общего ограничения, которое бы соответствовало этому набору вещей чисто. Что вы на самом деле хотите сделать? Например, вы можете взломать его с помощью проверок времени выполнения, таких как статический ctor (для общих типов - не так просто для общих методов)...
Тем не менее; чаще всего я вижу это, потому что люди хотят одного из:
EqualityComparer<T>.Default
Comparer<T>.Default
Что вы на самом деле пытаетесь сделать в методе? Возможно, вам действительно нужно C для реализации IComparable или другого интерфейса. В этом случае вам нужно что-то вроде
T GetObject<T> where T: IComparable