构造类型的.NET扩展方法

时间:2018-01-23 15:20:29

标签: c# visual-studio generics intellisense extension-methods

我正在进行实验,以便为类之间的映射创建一个小的编译安全助手。

public class A : IMappableTo<B>, IMappableTo<A>
{
    public string Name { get; set; }
}

public class B
{
    public string Name { get; set; }
}

public interface IMappableTo<T>
{
}

public static class ExtensionTest
{
    public static T MapTo<T>(this IMappableTo<T> source)
    {
        return default(T); // this does not mind, just for demo purposes
    }
}

目的是创建一个能够检测未实现的映射的扩展方法(在编译时)。

它按预期工作,但出现意外问题。

public static void test()
{
    // compiler doesn't complain, but intellisense can't autocomplete it.
    var case1 = new A().MapTo<A>().MapTo<B>(); 
    var case2 = new A().MapTo<string>(); // compiler complains, as intended
}

好吧,它确实可以编译和工作,但是 Visual Studio (在2015/2017年测试过)无法自动完成扩展方法 。我做了一些额外的测试,它似乎是由A类实现两个IMappableTo构造接口的事实产生的。如果我删除一个,自动完成功能只会再次运行。

如何修复此行为或以不会引起进一步麻烦的方式重写代码?

0 个答案:

没有答案