C# 命名空间/类型编译器错误

C# 命名空间/类型编译器错误,c#,web-services,C#,Web Services,我有一个C#,里面有一个班级 namespace TestBL { public class Test { public int Id { get; set; } public string PostedBy { get; set; } public string Text { get; set; } } } 然后,我添加一个Web服务,其中包含: using System; using System.Collection

我有一个C#,里面有一个班级

namespace TestBL
{
    public class Test
    {
        public int Id { get; set; }
        public string PostedBy { get; set; }
        public string Text { get; set; }
    }
}
然后,我添加一个Web服务,其中包含:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using TestBL;

namespace Test.WebService
{
    [ServiceContract]
    public interface ITestService
    {
         [OperationContract]
         IList<Test> GetTest();
    }
}

但是我想知道为什么会出错。

您的
ITestService
接口位于
Test.WebService
命名空间中。这意味着
Test
是一个名称空间。是的,我知道名称空间的名称是
Test.WebService
,但是C#编译器将名称空间名称用点分割,因此
Test
是名称空间,而WebService是
Test
中的名称空间

当您尝试使用
Test
类时,编译器非常愚蠢,认为您正在尝试编写一个namesapce,这就是错误发生的原因

总结:


发生错误的原因很简单,因为编译器认为Test是一个名称空间,在该名称空间中,有一个名为WebService的名称空间。明白吗?换句话说,C#编译器是愚蠢的(我只是开玩笑)

这里是名称空间测试-

 namespace Test.WebService // namepace WebService inside namespace Test.
而且它也是一个等级-

public class Test.

编译器不知道您使用哪一个,请更改类名。

您使用的是嵌套命名空间Test.WebService,它相当于:

namespace Test
{
    namespace WebService
    {
        [ServiceContract]
        public interface ITestService
        {
             [OperationContract]
             IList<Test> GetTest();
        }
    }
}
名称空间测试
{
命名空间Web服务
{
[服务合同]
公共接口ITestService
{
[经营合同]
IList GetTest();
}
}
}

外部命名空间(Test)正在导致与类Test的命名冲突。

我还想补充一点,作为一种解决方法,在不更改任何名称的情况下,只需使用TestBL在命名空间内移动
,如下所示:

namespace Test.WebService
{
    //other using
    using TestBL;

    [ServiceContract]
    public interface ITestService
    {
         [OperationContract]
         IList<Test> GetTest();
    }
}
namespace Test.WebService
{
//其他用途
使用TestBL;
[服务合同]
公共接口ITestService
{
[经营合同]
IList GetTest();
}
}

这不会返回错误,我发现,也许有人会觉得这很有用。

命名空间名称和类名在同一个项目中必须不同TestBL和Test的名称如何相同?请看
Test.WebService
Test.WebService
为您提供了命名空间
Test
和子命名空间
WebService
…您的意思是编译器只识别周期之前的东西吗,那么
WebService
是否存在不可见?不带句号的命名
TestWebService
可以解决这个问题吗?
namespace Test.WebService
{
    //other using
    using TestBL;

    [ServiceContract]
    public interface ITestService
    {
         [OperationContract]
         IList<Test> GetTest();
    }
}