1

我有这个扩展方法

public static List<Models.SomeObject> ToServiceModel(this List<SomeObject> source)
{
    return source
        .Select(s => s.ToServiceModel())
        .ToList();
}

其中 SomeObject 是第 3 方对象,Models.SomeObject 是它的服务模型版本,一切正常。

然后我添加了这个扩展方法

    public static List<UnrelatedObject> ToServiceModel(this List<Data.Models.UnrelatedObject> source)
    {
        return Mapper.Map<List<Data.Models.SqueezePage>, List<SqueezePage>>(source);
    }

其中 Data.Models.UnrelatedObject 是 Code First 对象,而 UnrelatedObject 是服务模型。

但是当我输入 时new List<UnrelatedObject>().ToServiceModel(),我会得到两个智能感知选项,每个扩展方法一个。编译器还会导致错误说我需要包含第一种类型的引用,这是错误的,因为显然该类型不属于。

即使我输入new List<int>().ToServiceModel了第一个选项(和另一种扩展方法),但没有第二个选项。

这可能与协方差或逆变有关吗?如何停止所有这些额外的智能感知和编译器混淆,以便扩展方法仅在目标类型上有效?

更新:

我已经更改了标题,现在让我尝试将问题重新集中在编译而不是智能感知上。

The type '{0}' is defined in an assembly that is not referenced. You must add a reference to assembly '{1}'.

项目 A 引用了引用程序集 C 的项目 B。项目 A 要求引用程序集 C,即使我没有直接使用程序集 C 中的任何类型。

我已经验证了所有编译都没有上述扩展方法,但是一旦我添加并构建它,我就会遇到程序集问题。我已经验证了扩展方法中使用的模型使用项目 D 的类型,与程序集 C 没有连接,并且类型是 POCO 并且仅使用 .NET 类型。

那么为什么向项目 B 添加一个不相关的扩展方法会导致项目 A 突然想要一个它不需要的引用呢?

4

0 回答 0