当前位置:  开发笔记 > 编程语言 > 正文

C#类型推断:在不应该的地方失败?

如何解决《C#类型推断:在不应该的地方失败?》经验,为你挑选了2个好方法。

请注意以下代码.违规行已被注释掉.

interface I { }

class C : I { }

class Program
{
    private static void function(T t) where T : class, I
    {
    }

    static void Main(string[] args)
    {
        // function(new C()); // wont compile
        function(new C());
    }
}

我认为类型推断应该找出类型,因为参数T提供了第一种类型,而I提供了第二种类型.

有没有办法重新设计功能,以便调用者可能不必指定类型?



1> Vojislav Sto..:

如果你想保留所有约束,那就没有了.但是,除非您有特定理由禁止值类型,否则这应该同样有效:

private static void function(I t)



2> Jon Skeet..:

有多种方法可以为类型推断添加额外的规则 - 人类可以应用的逻辑位,但编译器(遵守语言规范)不适用.

在您建议真正更新语言以使类型推断更灵活地工作之前,我强烈建议您阅读现有规范.如果你能够很容易地理解它仍然认为值得让它变得复杂,那就在Connect上发布一个功能请求- 但我个人认为它已经非常复杂了.我会说它比C#2.0好很多.

然而,提出相反的观点 - 几种语言(特别是功能性语言)具有更强大的类型推断机制.这里总有优点和缺点 - 我相信C#中当前推理系统的一个好处就是它总是取得进展或停止,例如 - Eric Lippert的博客有关于此的更多信息以及许多其他类型的推理问题.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有