C# 重载方法签名-编译器将可空类型视为与常规值类型同步
我们有一个包含许多方法的库,这些方法的重载方法签名从值类型更改为可为null的值类型,如下所示: A)C# 重载方法签名-编译器将可空类型视为与常规值类型同步,c#,.net,compiler-errors,nullable,C#,.net,Compiler Errors,Nullable,我们有一个包含许多方法的库,这些方法的重载方法签名从值类型更改为可为null的值类型,如下所示: A)IsEmpty(int-obj,int-defaultValue) B)IsEmpty(int?obj,int defaultValue) 正如您所看到的,唯一的区别是B可以为null。在我办公室的大多数工作站上,这种重载会编译,并且类型被认为是真正不同的 然而,由于某种原因,我的所有机器和虚拟机都不会编译。我们目前对为什么会发生这种情况感到困惑。我正在使用的机器应该与正在工作/编译的其他机器接
IsEmpty(int-obj,int-defaultValue)
B)IsEmpty(int?obj,int defaultValue)
正如您所看到的,唯一的区别是B可以为null。在我办公室的大多数工作站上,这种重载会编译,并且类型被认为是真正不同的
然而,由于某种原因,我的所有机器和虚拟机都不会编译。我们目前对为什么会发生这种情况感到困惑。我正在使用的机器应该与正在工作/编译的其他机器接近镜像
下面是编译过程中出现的错误示例:
- 错误28以下方法或属性之间的调用不明确:“BayTech.Common.Fix.IfEmpty(System.Guid,System.Guid)”和 'BayTech.Common.Fix.IfEmpty(System.Guid, System.Guid?'C:\Projects\Applications\JukeWeb\BayTech\Internal\Common Library\VS2010\Apps\BayTech.Common\Conversion\Fix.Empty.SL.cs 55 17 BayTech.Common
- 错误11以下方法或属性之间的调用不明确:“BayTech.Common.Fix.IfEmpty(System.DateTime, System.DateTime)和“BayTech.Common.Fix.IfEmpty(System.DateTime, System.DateTime?'C:\Projects\Applications\JukeWeb\BayTech\Internal\Common Library\VS2010\Apps\BayTech.Common\Conversion\Fix.Empty.SL.cs 35 17 BayTech.Common
- 错误165以下方法或属性之间的调用不明确:“BayTech.Common.Fix.IfEmpty(string,System.Guid)”和 'BayTech.Common.Fix.IfEmpty(字符串, System.Guid?'C:\Projects\Applications\JukeWeb\BayTech\Internal\Common Library\VS2010\Apps\BayTech.Common\Conversion\Fix.IfEmpty.Xml.cs 259 17 BayTech.Common
- VS2010
- Idealblade(最新安装)
- 已安装Telerik控件,包括即时代码
- 包括VS和Windows 7的所有服务包
- 包括VS和Windows 7的所有服务包
- Win7终极版
- SQL 2008 R2
- T4模板的VSExtensions,PostSharp
- 已安装Codesmith Professional
- 已安装VisualSVN
- DevExpress
- SQLComplete已安装
- 没有理由实施这样的方案。
如果希望或希望处理这种情况,请使用内置语言功能并仅保留可为null的实现。可空类型具有.hasvalue或.defaultValue等属性。什么是“IsEmpty(int obj,int defaultValue)”?请注意,可空类型也是值类型。错误消息中的重载不是您在代码中发布的重载。为什么?你能发布一致的信息吗?a)关于调用站点的一些信息会很好b)在不可为null的结构和可为null的结构之间存在隐式转换,所以这就是为什么编译器告诉你它是不明确的,这是由设计决定的,c)你的方法设计有缺陷,如果采用可为null的方法中非null值的含义与不可为null的方法中的值相同,则无需重载,只需为null参数使用默认值,或者用一个更少的参数创建一个真正的重载,并委托给一个具有不同名称的私有方法。如果您接受了前面一些问题的答案,您可能会得到更多帮助。