这可能是一个无知的问题,但我不确定为什么我不能同时使用命名空间别名和扩展方法。
下面的例子工作得很好:
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/