【问题标题】:C#: property/field namespace ambiguitiesC#:属性/字段命名空间歧义
【发布时间】:2009-06-22 17:34:51
【问题描述】:

我收到编译错误,因为编译器认为 Path.Combine 引用了我的字段,但我希望它引用 System.IO.Path 类。除了总是必须像 System.IO.Path.Combine() 这样编写 FQN 之外,还有什么好的方法来处理这个问题吗?

using System.IO;

class Foo
{
   public string Path;

   void Bar(){ Path.Combine("",""); } // compile error here
}

【问题讨论】:

    标签: c# properties namespaces syntax-error collision


    【解决方案1】:

    你可以这样做:

    using IOPath = System.IO.Path;
    

    然后在你的代码中:

    class Foo
    {
       public string Path;
    
       void Bar(){ IOPath.Combine("",""); } // compile error here
    }
    

    【讨论】:

    • 我正在编辑我的答案以添加此示例,但你已经得到它,所以 +1 给你!
    • 这是一个很好的答案;但是,我会敦促大多数人尽可能避免使用明显与 .NET 框架类型冲突的名称。 FilePath 或 DataPath 之类的名称或类似名称可能是消除属性歧义同时增加清晰度的更好方法。但是,我确实认为这是其中一种情况,对于 .NET 设计人员来说,Path 类名称可能是一个糟糕的选择,因为它是一个常见且有用的属性名称。
    • 或者完全避免使用别名,特别是如果它只是一次性冲突。
    【解决方案2】:

    分开你的参考资料:

    this.Path = System.IO.Path.PathFunction();
    

    我强烈建议在该类中的任何位置使用 Path 时暗示 System.IO 命名空间,因为很难区分。使用这个。限定符和完整的命名空间使它们与众不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2013-06-10
      • 2017-08-26
      • 2017-07-16
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      相关资源
      最近更新 更多