为“类型”的参数提供默认值会导致“错误CS1736“ eType”的默认参数值必须是编译时常量”

时间:2019-08-25 06:54:01

标签: c# c#-4.0 parameters

在C#中,我们可以提供以下参数的默认值:

void Foo(int i = 0) {}

但是当我们传递Type的默认参数时:

void FooWithTypeParam(Type eType = typeof(double)) {}

它导致

Error CS1736 Default parameter value for 'eType' must be a compile-time constant

我发现here可以使用空值提供内部默认值。

目前的解决方法是:

void FooWithTypeParam(Type eType = null)
{
   eType = eType ?? typeof(decimal);
}

但是用户看不到默认值! 请问您有什么建议吗?

Invisble default value!

2 个答案:

答案 0 :(得分:0)

好的。我想我知道你想要什么。您需要在编译时定义IS类型的内容,但希望它是用户可调整的。 它称为“泛型”。为此完美;)

public interface Foo<T, U> {
    void foobar (T first, U second);
}

public class Bar implements Foo {
    void foobar (T first, U second) {
        //Stuff
    }
}

//Use this like....
Bar bar = new Bar<Double, Decimal>

现在为该函数提供默认值,您可以使用null而不用担心显示正确的类型。函数参数将显示创建对象时输入的U和T。它还在编译期间进行类型验证-不要死于兴奋:)

还有一个参考链接。 https://www.tutorialsteacher.com/csharp/csharp-generics

答案 1 :(得分:0)

我只能这样做:

public MyMethod(int a, Type typeParam = null)
{
     // Set typeParam with default value "int" if is null:
     if(typeParam == null)
        typeParam = typeof(int);
......
}