了解razorblazor中的lambda。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了了解razorblazor中的lambda。相关的知识,希望对你有一定的参考价值。
我对Rrazor语法和C#很陌生,我刚刚学习了几门blazor课程,对其中一个例子中lambda的使用感到很困惑(这里的参考文献是 "Lambda")。https:/docs.microsoft.comen-usaspnetcoretutorialsbuild-your-first-blazor-app?view=aspnetcore-3.1#build-a-todo-list。
这一点。
<h3>Todo (@todos.Count(todo => !todo.IsDone))</h3>
整个代码在下面... 我的问题是,我的理解是,它正在评估是否有成员的 所有 列表中的内容都是trueefalse,然后把 计数 这些都在页面上,而且 做事 是Lambda中的一个局部变量(因为如果我把它改为 todoxxx => !"todoxxx.IsDone"。 它仍然工作)。)
我不明白的是,它是如何检查在 所有 列表来评估它?
对于这个可能非常简单的问题,我深表歉意!我是一个非常新的剃刀语法& C#一般来说,我只是在学习一些blazor课程,并被一个使用lambda的问题所困扰。
@page "/todo"
<h3>Todo (@todos.Count(todo => !todo.IsDone))</h3>
<ul>
@foreach (var todo in todos)
<li>
<input type="checkbox" @bind="todo.IsDone" />
<input @bind="todo.Title" />
</li>
</ul>
<input placeholder="Something todo" @bind="newTodo" />
<button @onclick="AddTodo">Add todo</button>
@code
private IList<TodoItem> todos = new List<TodoItem>();
private string newTodo;
private void AddTodo()
if (!string.IsNullOrWhiteSpace(newTodo))
todos.Add(new TodoItem Title = newTodo );
newTodo = string.Empty;
如果你看一下源代码中的 IEnumerable.Count你会发现,在幕后,它正是这样做的。
- 运行一个
foreach
对集合进行循环。 - 对每个集合成员测试您的lambda代码。
- 如果lambda的结果是
true
然后将计数器变量递增。 - 最后,它返回计数器的值。
在这个特定的上下文中,你的lambda本质上就像一个函数指针一样,只是这次有一个强定义的接口:它接受一个单一的参数,不管你的集合里有什么类型,然后返回 bool
.
关于 System.Linq
参考资料的来源,以及如何在没有明确的 @using
看起来Razor组件实际上是部分类,其其他部分是 "隐藏 "的(意味着由编译器自动生成)。对于你的特殊例子,如果你去到 \obj\Debug\netcoreapp3.1\Razor\Pages
文件夹中,你会发现一个名为 "Todo.razor.g.cs "的文件,其中包含以下内容。
namespace BlazorApp1.Pages
#line hidden
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
...
[Microsoft.AspNetCore.Components.RouteAttribute("/todo")]
public partial class Todo : Microsoft.AspNetCore.Components.ComponentBase
...
这意味着这5个命名空间在所有的组件中都是可用的,不管是在什么地方 _Imports.razor
内容。不知道为什么会选择这些特殊的,这可能是微软的问题。
以上是关于了解razorblazor中的lambda。的主要内容,如果未能解决你的问题,请参考以下文章
手动将 ENI 从子网分离后,VPC 中的 Lambda 不会创建新的 ENI