为什么C#Func <interface> lambda表达式需要强制转换为结果

You*_*jae 8 c# lambda func task-parallel-library

我需要更深入地了解Func类型表达式.

public class TheResult : IResultEntry {
    ...
}
Run Code Online (Sandbox Code Playgroud)

上面的类,为什么下面的第二种方法需要演员

我当然可以阅读错误信息,但很难理解.

// Success
public Task<IResultEntry> ProcessAsync_1()
{
    return Task.Factory.StartNew(() => (IResultEntry) new TheResult());
}

// Fail: Compiler error. Cannot implicitly convert...
public Task<IResultEntry> ProcessAsync_2()
{
    return Task.Factory.StartNew(() => new TheResult());
}
Run Code Online (Sandbox Code Playgroud)

如果我们在ReSharper的帮助下将其更改为命名方法,我们可以不进行强制转换.

public Task<IResultEntry> ProcessAsync_2_Changed()
{
    return Task.Factory.StartNew(function);
}

private IResultEntry function()
{
    return new TheResult();
}
Run Code Online (Sandbox Code Playgroud)