Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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
Visual Basic.NET与C#中名称空间的区别及处理方法_C#_Vb.net_Namespaces_Codedom - Fatal编程技术网

Visual Basic.NET与C#中名称空间的区别及处理方法

Visual Basic.NET与C#中名称空间的区别及处理方法,c#,vb.net,namespaces,codedom,C#,Vb.net,Namespaces,Codedom,在C#中,如果执行此操作,它将编译: namespace Name { public class Test { } public class TestUse { private global::Name.Test test; } } 但是,如果在VB.NET中尝试相同的方法,则不会: Namespace Name Public Class Test End Class Public Class Test

在C#中,如果执行此操作,它将编译:

namespace Name
{
    public class Test
    {
    }

    public class TestUse
    {
        private global::Name.Test test;
    }
}
但是,如果在VB.NET中尝试相同的方法,则不会:

Namespace Name
    Public Class Test
    End Class

    Public Class TestUse
        Private test As Global.Name.Test
    End Class
End Namespace
我在错误列表中得到(取决于我尝试使用“Test”的方式)“Name”不是“”的成员”或“Type”Name.Test“未定义”。我找到了两种方法让它工作,但这两种方法都不符合用户的合理期望。一种是从项目属性中删除“根命名空间”。另一个是将名称空间包含在“全局”和“名称”之间

我制作了一个自定义工具,它使用CodeDom为C#和VB.NET生成代码。这就是为什么上面两个修复都不可行的原因:我不能期望我的用户有一个空的根命名空间,我讨厌在我的代码生成中使用VB特有的技巧(这有点违背了使用语言中立工具的目的,不是吗?),比如选择“根命名空间”(并不是说我不知道该怎么做)并将其包含在我的代码生成中


我也不想忽略全局修饰符,因为它可以防止用户为生成的输出选择坏名称。有人对我应该如何处理这个问题有什么建议吗?

考虑到您必须为任何一种语言执行不同的代码生成任务,这只是差异中的一小部分用于生成该代码

乍一看,与其他实现细节相比,使用VB特有的插入默认名称空间的技巧进行编码并不是什么大问题


祝你好运!

我现在没有Windows机器可供检查,但你不能说“作为测试的私有测试”吗?我以为在解析过程中会自动搜索包含的命名空间。是的,我只是添加了一点特定于VB的代码生成怪癖。不幸的是,我看不到任何其他解决方案。