重载方法签名 - 编译器将可空类型视为与常规值类型同义

时间:2012-12-19 20:14:38

标签: c# .net compiler-errors nullable

我们有一个库,其中包含许多重载方法签名的方法,如下所示:

A。)IsEmpty(int obj, int defaultValue)

B。)IsEmpty(int? obj, int defaultValue)

正如您所看到的,唯一的区别是B可以为空。在我办公室的大多数工作站上,这种重载编译和类型被认为是真正独特的。

但是,出于某种原因,我的所有机器和VM都无法编译。我们目前感到困惑的是为什么会这样。我正在使用的机器应该靠近正在工作/编译的其他机器的镜像。

以下是编译过程中出现的错误示例:

  
      
  • 错误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控件已安装,包括Just-In-Code
  • VS和Windows 7中包含的所有服务包
  • VS和Windows 7中包含的所有服务包
  • Win7 Ultimate
  • SQL 2008 R2
  • T4模板的VSExtensions,PostSharp,
  • 已安装Codesmith Professional
  • 已安装VisualSVN
  • 的DevExpress
  • 已安装SQLComplete

1 个答案:

答案 0 :(得分:-1)

没有理由进行这样的实施。 如果您希望或想要处理此类情况,请使用内置语言功能并仅保留可为空的实现。可空类型具有.hasvalue或.defaultValue等属性。