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

时间:2016-04-19 06:51:19

标签: c# lambda task-parallel-library func

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

public class TheResult : IResultEntry {
    ...
}

在上面的课程中,为什么第二种方法需要强制

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

// 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());
}

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

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

private IResultEntry function()
{
    return new TheResult();
}

0 个答案:

没有答案