【问题标题】:Two namespaces with the same object name具有相同对象名称的两个命名空间
【发布时间】:2019-02-22 15:44:01
【问题描述】:

我有两个命名空间:

System.Numerics 和 UnityEngine

两者的类型均为Vector3

所以现在当我想使用它时,我必须在它之前声明哪个命名空间。像这样:

protected struct CVN
{
    public Complex h;
    public UnityEngine.Vector2 d;
    public UnityEngine.Vector3 n;
}

有什么方法可以定义我只想要一个命名空间中的Vector3,这样我就不必每次都输入NameSpaceHere.Vector3

或者我是否坚持每次都说明命名空间的乏味性质。特别是因为我只需要 Numerics 中的 Complex 类型,这很烦人。

【问题讨论】:

  • 也许使用Numerics.Complexusing UnityEngine;
  • 那么我必须在我使用 Complex 的每个地方都说明 Numerics,以便将问题切换到其他类型:P
  • 无论你想从UnityEngine命名空间使用vector2vector3,你需要在类文件的顶部声明using Vector2 = UnityEngine.Verctor2;using Vector3 = UnityEngine.Vector3
  • 如果你使用了不止一种来自 Numerics 的类型,特别是如果你同时使用了两种类似命名的类型,我会说尽管输入更多,但还是坚持下去,只是为了清楚地说明哪个在每个位置输入您的意思。 (为了未来读者的利益,就像你在 6 个月后一样)

标签: c#


【解决方案1】:

如果System.Numerics 需要的只是Complex,那么:

using UnityEngine;
using Complex = System.Numerics.Complex;

在文件的顶部,没有using System.Numerics; 应该这样做。 这是一个别名

【讨论】:

    【解决方案2】:

    您可以将所需类的 using 指令包装在当前类的命名空间中,而不是将其放在外面。 考虑这个例子

    namespace System.Numerics
    {
        class MyClass
        {
        }
    }
    
    namespace UnityEngine
    {
        class MyClass
        {
        }
    }
    
    using System.Numeric;
    
    namespace ConsoleApplication24
    {
        using UnityEngine; // inside the namespace
        class Program
        {
            static void Main(string[] args)
            {
                MyClass xx = new MyClass(); // from UnitEngine instead of System.Numeric
            }
        }
    }
    
    

    【讨论】:

    • 这很有趣,我不知道它有这种行为。 +1(我必须对其进行测试才能被说服^^)
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2010-11-12
    • 2015-11-11
    • 2011-04-10
    • 2020-07-13
    相关资源
    最近更新 更多