This may be a bit of an abstract question, so apologies in advance.
I am looking into generics in .NET, and was wondering about the where T : struct
constraint.
I understand that this allows you to restrict the type used to be a value type. My question is, without any type constraint, you can do a limited number of operations on T.
Do you gain the ability to use any additional operations when you specify where T : struct
, or is the only value in restricting the types you can pass in?
Edit
Some interesting answers so far, thanks. I guess the question I am actually asking is that if i were to write, (in a discussion about how to use generics),
"Now that you have constrained the type argument to value types, you can also do ___________________ on/with objects of that type"
Is there anything to put in that blank? I can think of things for the other constraints, but not this one.
All that T : struct
gains you is an implicit new()
constructor, and a few obvious things involving null
. Perhaps more importantly, callers can't use classes, interfaces or Nullable<T>
.
What types of operations are you after? For operators, try dynamic
in 4.0, or MiscUtil in 3.5
The only thing that you gain relative to other possible sets of constraints is the ability to work with values of type Nullable<T>
(which is why T: struct
prohibits caller from passing Nullable<T>
as a type parameter - it can't be nested).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With