Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用包含可空类型的默认参数的重写方法避免不明确的引用?_C#_Nullable_Default Parameters - Fatal编程技术网

C# 如何使用包含可空类型的默认参数的重写方法避免不明确的引用?

C# 如何使用包含可空类型的默认参数的重写方法避免不明确的引用?,c#,nullable,default-parameters,C#,Nullable,Default Parameters,我有以下几种方法: static public int GetInt(int _default = 0) { // do work, return _default if error } static public int? GetInt(int? _default = null) { // do work, return _default if error } 我希望在使用这些方法作为覆盖时,也会根据我使用它们分配给的变量选择该方法: int value1 = GetInt

我有以下几种方法:

static public int GetInt(int _default = 0)
{
    // do work, return _default if error
}

static public int? GetInt(int? _default = null)
{
    // do work, return _default if error
}
我希望在使用这些方法作为覆盖时,也会根据我使用它们分配给的变量选择该方法:

int value1 = GetInt();
int? value2 = GetInt();
但是,这会导致“不明确调用”错误


如何避免这种情况?

问题在于返回类型不是C#中方法的一部分。因此,您必须以不同的方式命名这些方法。另外,不要在参数名称中使用下划线

要引用MSDN中有关方法签名如何工作的内容,请执行以下操作:

方法的签名由方法的名称和 其每种形式的类型和种类(值、引用或输出) 参数,按从左到右的顺序考虑。签名 方法不包括返回类型,也不包含返回类型 包括可能为最右侧指定的参数修改器 参数

这是一种解决问题的方法。当您返回类型的默认值时,只需将其设置为泛型并使用
default(T)

static void Main(字符串[]args)
{
int value1=GetInt();
int?value2=GetInt();
}
静态公共T GetInt(T defaultValue=default(T))
{
布尔误差=真;
如果(错误)
{
返回默认值;
}
其他的
{
//叶田田
归还其他东西;
}
}
交换机体系结构

 static public T GetInt<T>(T defaultValue = default(T))
    where T: struct
 {
     // Do Work.

     // On failure
     return defaultValue; 
 }
或者,如果要忽略默认值:

 int value1 = GetInt<int>();
 int? value2 = GetInt<int?>();

更新:添加了约束-显然,使其成为泛型的问题是,您可以提供任何类型;但是,您的问题是如何将整数转换为
T

重载解析中从不使用返回类型。如果指定参数,则不需要新方法。。这是问题的可选参数部分。-1不编译。为什么要在T:struct中使用
?结构是不可为空的,因此
int?
无效这不允许指定默认值(
\u default
在问题中)@Ryan他没有指定他想要的是其他默认值,我不认为他does@Oskar该参数允许指定默认值所需的其他值。例如,在某些情况下,
-1
int
所需的默认值,但它取决于所填充的变量。
 int value1 = GetInt(0);
 int? value2 = GetInt(default(int?));
 int value1 = GetInt<int>();
 int? value2 = GetInt<int?>();
 return default(T);