c# - 为什么以下代码片段会成为 C#2.0 类型推断的问题?

标签 c# type-inference

我在 Jon Skeet 的 CSharp in Depth 的第 9 章中解释了 3.0 中类型推断的改进

Pg.247 上有一段代码片段“不应使用 2.0 进行编译”——但我找不到不应该这样做的原因。在目标框架为 2.0 的项目上尝试使用 VS2008 C# Express Edition 的问题 - 以下所有三个调用也可以编译和运行

2.0 引入了推断正确类型的委托(delegate)的能力。

new List<ThreadStart>().Add( delegate { Console.WriteLine("New Thread!"); } );   // works

当然,Jon 不会错的 (;) 'Sql is broken' + 在本书的勘误表页面上没有提到这一点。)所以我的主要怀疑是它仍在使用 3.0 类型推断 - 什么我失踪了吗?

    delegate int MyDelegate(string s);
    delegate TOutput MyConverter<TInput, TOutput>(TInput input);
    static void MyParse(MyDelegate del)
    {
        Console.WriteLine(del("100"));
    }
    static void MyConvert<TInput, TOutput>(MyConverter<TInput, TOutput> del, TInput input)
    {
        Console.WriteLine(del(input));
    }

    // Jon's code snippet begin
    delegate T MyFunc<T>();
    static void WriteResult<T>(MyFunc<T> function)
    {
        Console.WriteLine(function());
    }
    // end

    static void Main(string[] args)
    {
        MyParse(delegate(string s)
            {
                return Int32.Parse(s);
            }
        );
        MyConvert(delegate(string s)
            {
                return Int32.Parse(s);
            },
            "100");
        WriteResult(delegate { return 5; });    // Jon: Shouldn't work.
    }

最佳答案

“目标框架”设置的作用是禁用已添加到较新框架版本中的库和方法。大多数新语言功能不需要特殊的运行时支持或新库。因此,如果您使用它们,则需要更新的编译器,但您的应用仍可在 2.0 上运行。

关于c# - 为什么以下代码片段会成为 C#2.0 类型推断的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1023345/

相关文章:

c# - 无法访问的代码在哪里?

c# - 使用 Linq 对数据集进行分区

c# - 无法在客户端解码证书 new X509Certificate2()

haskell - Haskell 中不完整的隐式类型推断

rust - 如何帮助类型推断系统推断闭包参数的类型?

c++ - 如何避免在 decltype 表达式中指定变量?

generics - 编译器覆盖 F# 中的类型定义(泛型)

c# - 如何以编程方式保存来自 URL 的图像?

c# - 将一张表与自身相乘并得到一个字段是什么意思?

c# - Ado.Net Entity Framework ,linq : select multiples tables