与组件回调参数一起使用时,元组语法的 Visual Studio 2022 Blazor 错误/bug

Ber*_*cal 6 c# tuples blazor .net-6.0 visual-studio-2022

我有一个名为 TagComponent 的简单 Blazor 组件,它接收 4 个参数,我的问题是 OnTagSelected 参数,它接收从 TagComponent 调用的回调。

我的 .razor 页面中的代码片段:

// other code omitted for brevity

<p>Tags</p>
<div class="tags-container">
   @foreach (var tag in _allTags)
   {
      <TagComponent Name="@tag.Name" Id="@tag.Id" 
         AddToProductList="true" OnTagSelected="TagSelected" />
   }
</div>

// other code omitted for brevity
Run Code Online (Sandbox Code Playgroud)

TagComponent.razor 如下所示:

<span class="tag-body" @onclick="SelectTag" >
   @Name
</span>

@code {
   [Parameter, EditorRequired]
   public string Name { get; set; } = default!;

   [Parameter, EditorRequired]
   public int Id { get; set; }

   [Parameter]
   public bool AddToProductList { get; set; } = false;

   [Parameter, EditorRequired]
   public EventCallback<(int id, bool addToProduct)> OnTagSelected { get; set; }

   private async Task SelectTag()
   {
      await OnTagSelected.InvokeAsync((Id, AddToProductList));
   }
}
Run Code Online (Sandbox Code Playgroud)

我需要使用 @onclick 事件将 TagComponent 中的 2 个值返回到页面,因此我在 EventCallback TValue 上使用了一个元组。

回到页面,TagSelected 方法如下所示:

@code {

List<Tag> _allTags = new List<Tag>();
List<Tag> _productTags = new List<Tag>();

// other code omitted for brevity

private void TagSelected((int id, bool addToProduct) selectedTag)
{
   if (selectedTag.addToProduct)
   {
      var transferTag = _allTags.First(t => t.Id == selectedTag.id);
      _productTags.Add(new Tag(transferTag.Id, transferTag.Name));
      _allTags.Remove(transferTag);
   }
   else
   {
      var transferTag = _productTags.First(t => t.Id == selectedTag.id);
      _allTags.Add(new Tag(transferTag.Id, transferTag.Name));
      _productTags.Remove(transferTag);
   }
}

// other code omitted for brevity

}

Run Code Online (Sandbox Code Playgroud)

基本上,这里发生的情况是,当我单击 TagComponent 时,它将根据元组参数中的 bool 值在 _allTags 和 _productTags 列表之间切换。

代码编译并运行得很好,我的问题是错误列表选项卡中的错误/警告:

Visual Studio 错误列表选项卡

另外,在编辑器上,有一条红色的波浪线,好像有错误,但实际上并没有,因为代码可以编译并正常工作。

组件错误工具提示

我的问题是,为什么会发生这种情况,有没有办法让错误/警告消失?代码正在运行,但 IDE 显示错误,就好像它无法识别与 Blazor 代码混合的元组语法。

我使用的是 Windows 10,使用 Visual Studio Community 2022 Preview 17.4.0 Preview 2.0 和 .NET 6。

编辑:这似乎是 Visual Studio 特定的问题,在 VScode 上错误消失了(使用 .NET 6.0.401)。