我正在进行实验,以便为类之间的映射创建一个小的编译安全助手。
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构造接口的事实产生的。如果我删除一个,自动完成功能只会再次运行。
如何修复此行为或以不会引起进一步麻烦的方式重写代码?