[英]C# - 'Double' is an ambiguous reference
我的代码库中有以下文件:
StandardUnits.Numbers.Double
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace StandardUnits.Numbers
{
public class Double : Number<double>
{
public Double(double value) : base(value) { }
public static implicit operator Double(double value) { return new Double(value); }
public static implicit operator double(Double value) { return value._value; }
}
}
和
StandardUnitsTest.Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using StandardUnits;
using StandardUnits.Numbers;
namespace StandardUnitsTest
{
class Program
{
static void Main(string[] args)
{
Equatable<string> str = "Hello! This is my number: ";
Number<float> n = 4;
Double o = 5.5;
Float p = n + o;
Console.WriteLine(str + p.ToString());
Console.Read();
}
}
}
出于某种原因,使用“Double”会产生以下错误:
Error 1 'Double' is an ambiguous reference between 'double' and 'StandardUnits.Numbers.Double' 16 13
但是没有为“Float”产生这样的错误,它以与“Double”相同的方式产生(但显然是“float”而不是“double”)。 为什么编译器能够区分StandardUnits.Numbers.Float
和float
,但不能区分StandardUnits.Numbers.Double
和double
? 为什么区分大小写不会阻止这种情况
如果需要,我也可以为Number和Float提供代码片段。
与System.Double存在冲突。
没有System.Float( float
由System.Single表示),因此没有冲突。
double
的CLR类型是System.Double
。 这是模棱两可的。
float
的CLR类型是System.Single
。 这与你的Float
类型并不含糊......尽管它确实建议你的类型应该命名为Single
,以便与框架保持一致。 理想情况下,更改名称,以便它们不与System
命名空间中的类型冲突,但是......假设您确实需要这些类型。 (他们添加了哪些好处?)
这与C#中的float
和double
别名没有任何关系,而且区分大小写。 这些只是System.Single
和System.Double
硬连线别名,永远不会有歧义。 这是你对Double
的使用,这是不明确的。
System.Double已经存在(它内置于语言中。)我很好奇你为什么要创建自己的版本。
这是因为有一个System.Double
类型(它的别名是double
)但没有System.Float
:它叫做System.Single
- 它的别名是float
。
System
命名空间中已经有一个Double
类( double
是它的别名),所以如果你使用Double
,编译器就不知道你的意思。
但是, float
是System.Single
的别名。 没有System.Float
,所以没有冲突。
请参阅“内置类型” 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.