剃刀通用列表不会添加新项目

时间:2019-12-09 21:27:59

标签: c# razor blazor

在下面的代码示例中,我已经在增量计数器演示中添加了逻辑以显示列表的内容,然后在on click事件中向列表添加了“新项”。但是,尝试添加时不添加...两个Console.WriteLine会在添加前后忠实地显示具有三个成员的列表,但是没有报告错误,并且列表没有任何变化。

示例代码:

@page "/ListIncrement"

<div>
    <p>Current count: @currentCount</p>

    <ul>
        @foreach (var ListItem in TestList)
        {
            <li>@ListItem</li>
        }
    </ul>

    <button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

</div>

@code {
    private int currentCount = 0;

    public List<string> TestList => new List<string>{
        "one", "Two", "Three" };

    private void IncrementCount()
    {
        currentCount++;

        Console.WriteLine("Count= {0}", TestList.Count);
        TestList.Add("New Item");
        Console.WriteLine("Count= {0}", TestList.Count);

    }
}

1 个答案:

答案 0 :(得分:5)

问题出在这行

 public List<string> TestList => new List<string>{ "one", "Two", "Three" };

将其更改为此,它将起作用:

 public List<string> TestList = new List<string>{ "one", "Two", "Three" };

=>箭头称为Expression-body成员,每当调用TestList时,它将运行该表达式,因此,当组件获取TestList时,它将最终每次返回一个new List<string>{ "one", "Two", "Three" };,而不是仅在初始化时创建新列表。

以下是更多信息: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members