Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do you gain any operations when you constrain a generic type using where T : struct?

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.

like image 930
Fiona - myaccessible.website Avatar asked Mar 24 '10 23:03

Fiona - myaccessible.website


2 Answers

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

like image 66
Marc Gravell Avatar answered Sep 21 '22 17:09

Marc Gravell


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

like image 45
Pavel Minaev Avatar answered Sep 19 '22 17:09

Pavel Minaev