为什么此代码会抛出错误:“并非所有代码路径都返回值”?
private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(()=>
{
IUnityContainer container = new UnityContainer();
});
答案 0 :(得分:1)
您的代码存在一些问题:
首先,您使用的Lazy<T>
构造函数将Func<T>
作为参数。这意味着您传递的lambda作为参数需要返回类型T
的值。
编写lambda表达式时,有两种方法可以编写它。例如,返回int
值的lambda可以写为简写版本:
Func<int> f = () => 0;
或者使用完整版:
Func<int> f = () =>
{
return 0;
};
注意第二个版本如何使用return
关键字,而第一个版本不使用return
关键字。这是因为当使用lambda表达式的速记格式时,隐含Func
。
第二个问题是你误解了container
作为参数的目的。它不仅仅是第一次引用Func
时运行的一些代码。 new Lazy<IUnityContainer>(() => new UnityContainer());
需要实际返回将要使用的值。
因此,在您的情况下,您需要将lambda转换为速记版本:
return
或者在匿名方法中包含new Lazy<IUnityContainer>(() =>
{
new UnityContainer());
});
关键字:
let store = Twitter.sharedInstance().sessionStore
if let userID = store.session()?.userID {
store.logOutUserID(userID)
}
答案 1 :(得分:0)
你的lamba表达式中不需要assignemt,你只需要你的lambda返回一个新的UnityContainer对象:
private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() => new UnityContainer());
对于每个输入,只需返回一个新的UnityContainer对象,就可以读取以下lambda
() => new UnityContainer()
有关延迟初始化的更多信息,请查看here。