考虑 AutoMapper 中的以下代码
CreateMap<ViewModel, ServiceModel>()
.ForMember(
x => x.Type,
opt => opt.MapFrom(y =>
y.TypeName switch
{
"FirstName" => typeof(FirstModel),
"SecondName" => typeof(SecondModel),
_ => null
}));
Run Code Online (Sandbox Code Playgroud)
我有几种不同的情况,我想为每个字符串返回特定类型。
编译器不同意:
表达式树不能包含 switch 表达式。
这是为什么?我希望这个功能(在内部被巧妙地称为表达式)执行Expression.Switch,因此应该可以在表达式树中使用。
我知道我可以用三元运算符语法替换。我想了解为什么它不起作用。
编辑
感谢Sweeper指出这实际上不是一个 switch 表达式。我想我是被带上了会议列车并被名字愚弄了。
Ivan Stoev我知道它不受支持,但我很好奇为什么。我理解为什么不支持块作用域,但 switch case 本质上非常简单且具有声明性,这非常适合表达式树。
编辑 2 感谢下面的Jeroen Mostert评论,我现在了解到 switch case 内部远非简单,因此它在表达式树中没有位置。
这个标题对我来说听起来很愚蠢,但必须至少有一些聪明的方法才能达到这样的效果,我不知道怎么解释它.我需要使用sorted in stream API对数组进行排序.到目前为止,这是我的流:
Arrays.stream(sequence.split(" "))
.mapToInt(Integer::parseInt)
.boxed()
.sorted((a, b) -> a.compareTo(b))
.forEach(a -> System.out.print(a + " "));
Run Code Online (Sandbox Code Playgroud)
现在我有两种不同的过程 - 升序和降序,我需要使用的排序在用户输入中指定.所以我想做的就是切换2个案例:"升序"和"降序"以及分别存储lambda表达式的变量:
switch(command) {
case "ascending": var = a.compareTo(b);
case "descending": var = b.compareTo(a);
}
Run Code Online (Sandbox Code Playgroud)
然后我的排序看起来像:
.sorted((a, b) -> var)
Run Code Online (Sandbox Code Playgroud)
我在参加的python课程中得到了这个想法.在那里可以将对象存储在变量中,从而使变量"可执行".我意识到这个lambda不是一个对象,而是一个表达式,但我要问的是有什么聪明的方法可以达到这样的结果,或者我应该只是
if(var)
Run Code Online (Sandbox Code Playgroud)
每个排序顺序有两个不同的流.
action-chain epic= Epic,根据服务调用返回“成功”或“失败”动作。
service=来自HttpModuleAngular2的Http服务
我需要将数据发送到服务器。我有一个CREATE,CREATE_SUCCESS和CREATE_FAIL行动。我的想法是CREATE在提交时发送。然后,我有一个action-chain epic,它开始service调用我的服务器并触发CREATE_SUCCESS或CREATE_FAIL根据响应进行触发。
我action-chain epic会触发重复的动作-在这两种情况下,都会触发两个动作,例如:如果成功,则每个动作都会CREATE调度两个CREATE_SUCCESS动作。
private createAnimalActionChain() {
return action$ => {
return action$
.ofType(AnimalActions.CREATE)
.switchMap(action => {
return this.service
.create(action.payload)
.map(httpResponse => {
let response = httpResponse.json()
if (response.success) {
return this.actions.createSuccess()
}
return this.actions.createFail(response.errors)
})
})
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我撰写的内容,并且大部分都在起作用。如果有更好的方法,我全神贯注。直到最近,分派多个动作才不是真正的问题,但是对我来说似乎从来没有问题,所以我很乐意修复它。
编辑:我刚刚发现,有时我的应用程序会在执行任何Epic之前分派重复的动作。我现在正试图了解原因。
编辑2:没关系编辑。这是一个孤立的情况,submit事件一直冒泡到顶部,并且因为我将 …