C# 并非所有代码路径都在lambda表达式中返回类型为';Func<;IUnityContainer>;

C# 并非所有代码路径都在lambda表达式中返回类型为';Func<;IUnityContainer>;,c#,C#,为什么这段代码抛出错误:“不是所有代码路径都返回值” private static Lazy container=new Lazy(()=> { IUnityContainer容器=新的UnityContainer(); }); 在lamba表达式中不需要赋值,只需要lambda返回一个新的UnityContainer对象: private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>

为什么这段代码抛出错误:“不是所有代码路径都返回值”

private static Lazy container=new Lazy(()=>
{
IUnityContainer容器=新的UnityContainer();
});

在lamba表达式中不需要赋值,只需要lambda返回一个新的UnityContainer对象:

private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() => new UnityContainer());

有关延迟初始化的更多信息,请查看。

您的代码有几个问题:

首先,您正在使用的
Lazy
构造函数将
Func
作为参数。这意味着作为参数传递的lambda需要返回类型为
T
的值

编写lambda表达式时,有两种方法。例如,返回
int
值的lambda可以写成速记版本:

Func<int> f = () => 0;
new Lazy<IUnityContainer>(() => new UnityContainer());
或者在匿名方法中包含
return
关键字:

new Lazy<IUnityContainer>(() => 
{
    new UnityContainer());
});
newlazy(()=>
{
新的UnityContainer());
});

我想您会发现,在该lambda中没有返回值的代码路径。是的,在这里它显示没有返回值
Func<int> f = () => 
{
    return 0;
};
new Lazy<IUnityContainer>(() => new UnityContainer());
new Lazy<IUnityContainer>(() => 
{
    new UnityContainer());
});