了解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。的主要内容,如果未能解决你的问题,请参考以下文章

如何授权 Lambda 函数发布到 BigQuery?

手动将 ENI 从子网分离后,VPC 中的 Lambda 不会创建新的 ENI

在 AWS lambda 上运行 graphql 应用程序

Java???Lambda??????????????????

Lambda表达式

匿名函数(lambda)