Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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#_.net_Compiler Errors_Nullable - Fatal编程技术网

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

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。在我办公室的大多数工作站上,这种重载会编译,并且类型被认为是真正不同的 然而,由于某种原因,我的所有机器和虚拟机都不会编译。我们目前对为什么会发生这种情况感到困惑。我正在使用的机器应该与正在工作/编译的其他机器接

我们有一个包含许多方法的库,这些方法的重载方法签名从值类型更改为可为null的值类型,如下所示:

A)
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参数使用默认值,或者用一个更少的参数创建一个真正的重载,并委托给一个具有不同名称的私有方法。如果您接受了前面一些问题的答案,您可能会得到更多帮助。