首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型'T‘与类型'T’不兼容

类型'T‘与类型'T’不兼容
EN

Stack Overflow用户
提问于 2014-03-10 16:52:50
回答 1查看 507关注 0票数 7

我有两个用C#编写的库,我想在F#应用程序中使用它们。两个库都使用相同的类型,但是,我无法说服F#的类型检查器。

下面是一个使用Office互操作类型的简单示例。F#似乎对这些类型的问题特别敏感。在F#方面抛出似乎对情况没有任何帮助。所有三个项目都引用同一个程序集("Microsoft.Office.Interop.Excel“版本14.0.0.0)。

在项目"Project1“( C#项目)中:

代码语言:javascript
复制
namespace Project1
{
    public class Class1
    {
        public static Microsoft.Office.Interop.Excel.Application GetApp()
        {
            return new Microsoft.Office.Interop.Excel.Application();
        }
    }
}

在项目"Project2“( C#项目)中:

代码语言:javascript
复制
namespace Project2
{
    public class Class2
    {
        Microsoft.Office.Interop.Excel.Application _app;

        public Class2(Microsoft.Office.Interop.Excel.Application app)
        {
            _app = app;
        }
    }
}

在项目"TestApp“( F#项目)中:

代码语言:javascript
复制
[<EntryPoint>]
let main argv = 
    let c2 = Project2.Class2(Project1.Class1.GetApp())
    0 

有什么暗示吗?

编辑:

使用以下动态强制转换更改对Class2构造函数的调用可以解决这个问题:

代码语言:javascript
复制
let c2 = Project2.Class2(Project1.Class1.GetApp() :?> Microsoft.Office.Interop.Excel.Application)

然而,这是不令人满意的,因为它是动态的,并且2)我仍然不明白为什么原始类型检查失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-17 23:57:10

通讯互通。当引用COM程序集时,它实际上将生成一个COM互操作程序集,以便在.NET和COM之间进行封送。如果有两个程序集同时引用相同的COM程序集,则实际上可能有两个相同生成的互操作程序集。

一个解决方案,也是更好的总体设计,是在两个程序集(或共享的第三个程序集)之一中创建接口,这些程序集公开您想要公开的特性,而不是使用或使用COM类型,而是使用这些接口。

代码语言:javascript
复制
namespace Project1
{
    public interface IApplication
    {
        // application members here...
    }

    public class Class1
    {
        public static IApplication GetApp()
        {
            return new ExcelApplication(new Microsoft.Office.Interop.Excel.Application());
        }

        private class ExcelApplication : IApplication
        {
            public ExcelApplication(Microsoft.Office.Interop.Excel.Application app)
            {
                 this.app = app;
            }

            // implement IApplication here...
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22306352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档