【问题标题】:Are generic type constraints possible in blazor?blazor 中是否可以使用泛型类型约束?
【发布时间】:2020-06-28 01:58:46
【问题描述】:

如何将 TModel 限制为仅是类或实现特定接口?

@typeparam TModel

无法使语法正常工作。

【问题讨论】:

标签: c# blazor-server-side asp.net-blazor


【解决方案1】:

解决方案是将类型约束另外放在类后面的部分代码中。有效!

【讨论】:

  • 你能发一个例子吗?我按照你的描述做了,Blazor 说部分有不同的基类,即一个(来自 razor)在没有约束的情况下编译,第二个(c# 代码后面)有约束。
  • 如果 Blazor 说部分具有不同的基类,则很可能剃刀文件包含至少一个错误。这甚至可能是使用过的子视图/控件中的问题
【解决方案2】:

确实,Sven 发布的答案有效,但我需要进行一项修改 - 将 <RazorLangVersion>3.0</RazorLangVersion> 添加到我的 .csproj 文件中。之后,项目被编译。 所以这是我的完整文件:

  1. Project.cs
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <RazorLangVersion>3.0</RazorLangVersion> <!-- Important -->
    <Nullable>enable</Nullable>
    <ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
  </PropertyGroup>
</Project>
  1. 剃须刀组件
@typeparam TViewModel
@inherits PageBase<TViewModel>

<h3>Some text</h3>
  1. 核心背后
public abstract partial class AuthenticatedPageBase<TViewModel>
    where TViewModel : ViewModelBase
{
}

编辑: 好吧,从 csproj 文件中删除 &lt;RazorLangVersion&gt; 标记后,它似乎仍然有效。

【讨论】:

  • RazorLangVersion 3 在使用 net5.0 时被隐式使用。我想这只是一个巧合。
【解决方案3】:

从 ASP.NET Core 6.0 开始,您可以使用以下语法来指定泛型类型约束:

@typeparam TModel where TModel : IModel

【讨论】:

    猜你喜欢
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多