在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);
}
但是用户看不到默认值! 请问您有什么建议吗?
答案 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);
......
}