gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:10:30 25 4
gpt4 key购买 nike

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

下面的例子工作得很好:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com