C#在相应的输入类型中返回零

C#在相应的输入类型中返回零,c#,dynamic,C#,Dynamic,我想要一个函数,它可以: private static dynamic Zero(Type T) { if (T == typeof(Decimal)) { return Decimal.Zero; } else if (T == typeof(Double)) { return new Double(); } else

我想要一个函数,它可以:

    private static dynamic Zero(Type T)
    {
        if (T == typeof(Decimal))
        {
            return Decimal.Zero;
        }
        else if (T == typeof(Double))
        {
            return new Double();
        }
        else if (T == typeof(Int64))
        {
            return new Int64();
        }
        ...
    }

但对于所有类型。我不想写一个巨大的else if语句。还有别的办法吗?我正在使用C#4.0。

作为值类型,默认构造函数可以工作

if(T.IsValueType()) return Activator.CreateInstance(T);

然后你可以做其他的事情,比如在类型上测试Zero方法,如果是的话,调用它。

这里不需要
动态

private static T Zero<T>()
{
    return default(T);
}
private static T Zero()
{
返回默认值(T);
}

不起作用:找不到类型或命名空间名称“t”(是否缺少using指令或程序集引用?),我认为t必须是泛型参数才能使default()起作用。@mitch
default
接受类型参数+1。。。这将起作用,但您还需要更改函数签名…并且假定
else返回null
处理引用类型的“零”情况。一种可能的特殊情况可能是字符串,这取决于原始海报希望“零字符串”为null还是空(假设他关心字符串!)。谢谢。我之前把反射的东西弄得一团糟,无法让它工作。我甚至不需要检查IsValueType,因为我在调用Zero()函数之前进行了检查。再次感谢。在我看来,这样的解决方案似乎总是对反思的一种粗暴使用。但我想这就是默认值(T)所能做的。唉!。。。Guffa先说对了。。。不知道他为什么删除了他的答案。
private static T Zero<T>()
{
    return default(T);
}