C# - 'Double'是一个模棱两可的参考

web*_*rc2 2 c# case-sensitive disambiguation

我的代码库中有以下文件:

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,使用"Double"会产生以下错误:

Error 1 'Double' is an ambiguous reference between 'double' and 'StandardUnits.Numbers.Double' 16 13
Run Code Online (Sandbox Code Playgroud)

但是没有为"Float"产生这样的错误,它以与"Double"相同的方式产生(但显然是"float"而不是"double").为什么编译器能够区分StandardUnits.Numbers.Floatfloat,而不是StandardUnits.Numbers.Doubledouble?之间?为什么区分大小写不会阻止这种情况

如果需要,我也可以为Number和Float提供代码片段.

Zai*_*sud 13

System.Double存在冲突.

没有System.Float(floatSystem.Single代表),因此没有冲突.


Jon*_*eet 9

CLR类型doubleSystem.Double.这是模棱两可的.

CLR类型floatSystem.Single.这与你的Float类型并不含糊......尽管它确实建议你的类型应该被命名Single,以便与框架保持一致.理想情况下,更改名称,以便它们System命名空间中的类型冲突,但是......假设您确实需要这些类型.(他们添加了哪些好处?)

这并不会有什么做的float,并double在C#和区分大小写的别名,真的.这些都只是硬连线别名System.SingleSystem.Double分别,并且绝不会含糊.这是你的使用Double是模棱两可的.