c# - 为什么扩展方法不适用于命名空间别名?

标签 c# visual-studio-2008 .net-3.5

这可能是一个无知的问题,但我不确定为什么我不能同时使用命名空间别名和扩展方法。

下面的例子工作得很好:

Program.cs

using System;
using ExtensionMethodTest.Domain;

namespace ExtensionMethodTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var m = new Domain.MyClass();
            var result = m.UpperCaseName();
        }
    }
}

MyClass.cs

using System;

namespace ExtensionMethodTest.Domain
{
    public class MyClass
    {
        public string Name { get; set; }
    }
}

MyClassExtensions.cs

using System;

namespace ExtensionMethodTest.Domain
{
    public static class MyClassExtensions
    {
        public static string UpperCaseName (this MyClass myClass)
        {
            return myClass.Name.ToUpper();
        }
    }
}

但是,当我在 Program.cs 中对域进行如下别名时:

using Domain = ExtensionMethodTest.Domain;

扩展方法不再有效..

当我处理将各种域对象转换为契约对象(假设我有 4 个域程序集和 4 个契约程序集)以用于 Web 服务时,这可能会令人沮丧。使用别名会非常方便,因为我可以按如下方式别名并继续使用各种扩展方法(例如 ToContract 等):

using BillingContracts = Namespace.Billing.Contracts;
using IssuingContracts = Namespace.Issuing.Contracts;

等...

我期待答案。我确信它很简单,但我终究无法弄清楚为什么它不起作用。

谢谢!

最佳答案

确保仍然添加一个非别名 using 语句:

Program.cs

using System;
using ExtensionMethodTest.Domain; //DON'T FORGET A NON-ALIASED USING
using MyDomain = ExtensionMethodTest.Domain;

namespace ExtensionMethodTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var m = new MyDomain.MyClass();
            var result = m.UpperCaseName();
        }
    }
}

MyClass.cs

using System;

namespace ExtensionMethodTest.Domain
{
    public class MyClass
    {
        public string Name { get; set; }
    }
}

MyClassExtensions.cs

using System;

namespace ExtensionMethodTest.Domain
{
    public static class MyClassExtensions
    {
        public static string UpperCaseName (this MyClass myClass)
        {
            return myClass.Name.ToUpper();
        }
    }
}

关于c# - 为什么扩展方法不适用于命名空间别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337453/

相关文章:

c# - 如何为 WPF 数据绑定(bind)行项目(形状)设置动画

C++ #include 找不到文件

.net-3.5 - Visual Studio 2015 : Create VSTO project for Office 2010 and above that targets . NET 3.5

c# - 加载了错误的 App.config

c# - 协程是Unity3D中的新线程吗?

c# - 使用结构体字段作为参数

c# - 在 .NET TextBox 上设置光标的当前行

c++ - 从 C++ 应用程序请求 Windows Vista/7 上的管理员权限

c++ - 在 Visual C++ 中将 std::string 添加到 uint 时出现模棱两可的错误

.net - 确定是否安装了 .NET 3.5 的最佳方法