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);