views:

286

answers:

2

I know the "default" keyword returns the default value of a statically determined type, as shown for instance in this question.

However, given an instance of a type, is there a simple way to get the default value of this type, dynamically ? The only way I found while googling is this :

static object DefaultValue(Type myType)
{
    if (!myType.IsValueType)
        return null;
    else
        return Activator.CreateInstance(myType);
}

But I'd like to avoid the Activator class if possible.

+3  A: 

Why do you want to avoid Activator? Basically that is the way of doing it.

I mean, you could write a generic method and then call that via reflection, but that's a pretty hideous "long cut" just to avoid Activator.

Jon Skeet
+5  A: 

This is likely your best route.

I wouldn't be afraid of using the Activator class here. This is a pretty standard class that is depended on by the compilers. For instance this VB code

Public Sub Example(Of T as New)()
  Dim x = new T()
End Sub

Translates into roughly this code

Public Sub Example(Of T As New)()
  Dim x = Activator.CreateInstance(OF T)
ENd Sub
JaredPar
That is generics (which the OP wants to avoid), and isn't the same as "default" - it should return null for classes.
Marc Gravell
Thank you very much ! I know Reflection is uber-powerfull, but I'm reluctant to use it when there are simple solutions. But if there's no choice, let's go with it :)
Guulh
@Marc, very true, I was mainly trying to give an example showing that Activator is not an *evil* class
JaredPar
I quite agree - simply that it doesn't seem to answer the original question... Oh well, the OP is happy, at least... ;-p
Marc Gravell