C#扩展方法歧义:被扩展的类不是签名的一部分吗?

C#扩展方法歧义:被扩展的类不是签名的一部分吗?,c#,extension-methods,C#,Extension Methods,我有一些扩展方法的歧义问题。我有几个类似的类,每个类都有一个名为“ToEntity”的扩展方法。如果这些扩展方法中有一个以上被引入范围,编译器就不知道该使用哪一个,尽管通过检查扩展类试图使用的扩展类似乎可以辨别出这一点。显然不是这样,但也许我做错了什么?例如: // these classes both have ToEntity() extension methods which return MyEntity MyExtendedClass1 model1 = new MyExtendedC

我有一些扩展方法的歧义问题。我有几个类似的类,每个类都有一个名为“ToEntity”的扩展方法。如果这些扩展方法中有一个以上被引入范围,编译器就不知道该使用哪一个,尽管通过检查扩展类试图使用的扩展类似乎可以辨别出这一点。显然不是这样,但也许我做错了什么?例如:

// these classes both have ToEntity() extension methods which return MyEntity
MyExtendedClass1 model1 = new MyExtendedClass1();
MyExtendedClass2 model2 = new MyExtendedClass2();

MyEntity myEntity1 = model1.ToEntity(); // ambiguous... why?
public static class Ext
{
    public static void A(this Object a) { }
    public static void A(this ValueType a) { }
    public static void CallSite() { 1.A(); }
}
在过去的几个月里,我通过调用其中一个方法“ToEntity2()”找到了解决这个问题的捷径,这个方法非常蹩脚,尤其是现在我正在添加更多需要ToEntity()扩展的类。现在我正在重构,希望找到更好的方法。所以我想我明确的问题是:

为什么这些方法不明确,而不是根据它们扩展的类来区分? 我的工作选择是什么

更新:我的扩展方法的定义如下:

public static class MyExtensions
{
    public static MyEntity ToEntity(this MyExtendedClass1 myExtClass)
    {
        // do stuff with myExtClass
        // eventually return a MyEntity
    }

    public static MyEntity ToEntity(this MyExtendedClass2 myExtClass)
    {
        // do stuff with myExtClass
        // eventually return a MyEntity
    }
}

是否在接口上定义了扩展方法之一?例如,这会导致不明确的调用错误:

public static class Ext
{
    public static void A(this IComparable<int> a) { }
    public static void A(this ValueType a) { }
    public static void CallSite() { 1.A(); }
}

可以发布扩展方法,至少是签名吗?还有,我确定你已经检查过了,但是。。。
MyExtendedClass1
是否有一个名为
ToEntity()
的公共实例方法?我假设
MyExtendedClass1
MyExtendedClass2
MyEntity
的派生类。。您的扩展方法以
MyEntity
为例。你能用一些代码来证实这一点吗?你的代码对我来说编译得很好。在visual studio中,当出现歧义错误时,你可以滚动“红色扭曲”代码,描述将向你显示有问题的元素。你能把上面写的贴出来吗?不,但那很有趣。我的问题似乎已经消失了(现在…),我无法解释。我没有清理和重建。在过去的几个月里,我清理和重建了很多次,但它什么也没做。我想知道这是否与web服务所涉及的数据类型有关。无论如何,所有的评论都很有趣。如果有人想关闭这个,这很好,但请注意,在发布之前,我确实读了很多关于扩展方法签名的书。对不起,这是浪费你的时间。抵制反对票将非常感激。