为什么扩展方法不能与命名空间别名工作?别名、能与、方法、工作

2023-09-07 03:46:01 作者:穿拖鞋走出高调

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

This may be an ignorant question, but I'm unsure why I can not use namespace aliasing and extension methods together.

下面的示例工作得很好:

The following example works just fine:

的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中,如下所示:

However, when I alias domain as follows in Program.cs:

using Domain = ExtensionMethodTest.Domain;

扩展方法不再起作用。

The extension method no longer works..

这可以是相当令人沮丧,当我处理各种转换域对象签订合同的对象(比方说,我有4个域组件和4个合约总成),用于Web服务的使用。使用别名将是非常方便的,因为我可以别名如下,并继续使用各种扩展方法(如ToContract等):

This can be rather frustrating when I'm dealing with converting various domain objects to contract objects (let's say I have 4 domain assemblies and 4 contract assemblies) for use in a web service. Using aliasing would be very handy as I could alias as follows and continue to use the various extension methods (such as ToContract, etc.):

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

等等...

etc...

我期待着答案。我敢肯定,这是简单的,但我为我的生活,想不通为什么它不工作。

I look forward to the answer.. I'm sure it's straight forward, but I, for the life of me, can't figure out why it doesn't work.

谢谢!

推荐答案

确认仍然增加的非别名 using语句:

Make sure to still add a non-aliased using statement:

的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();
        }
    }
}