我在 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/