Blazor 中是否可以使用泛型类型约束?
Are generic type constraints possible in blazor?
如何将 TModel 限制为仅 类 或实现特定接口?
@typeparam TModel
语法无法正常工作。
解决方法是在class后面的部分代码中另外添加类型约束。有效!
确实,Sven 发布的答案有效,但我需要做一个修改 - 添加 <RazorLangVersion>3.0</RazorLangVersion>
到我的 .csproj 文件。之后,该项目被编译。
所以这是我的完整文件:
- 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>
- Razor 组件
@typeparam TViewModel
@inherits PageBase<TViewModel>
<h3>Some text</h3>
- 背后的核心
public abstract partial class AuthenticatedPageBase<TViewModel>
where TViewModel : ViewModelBase
{
}
编辑:
好吧,从 csproj 文件中删除 <RazorLangVersion>
标签后,它似乎仍然有效。
从ASP.NET Core 6.0 开始,您可以使用以下语法指定泛型类型约束:
@typeparam TModel where TModel : IModel
如何将 TModel 限制为仅 类 或实现特定接口?
@typeparam TModel
语法无法正常工作。
解决方法是在class后面的部分代码中另外添加类型约束。有效!
确实,Sven 发布的答案有效,但我需要做一个修改 - 添加 <RazorLangVersion>3.0</RazorLangVersion>
到我的 .csproj 文件。之后,该项目被编译。
所以这是我的完整文件:
- 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>
- Razor 组件
@typeparam TViewModel
@inherits PageBase<TViewModel>
<h3>Some text</h3>
- 背后的核心
public abstract partial class AuthenticatedPageBase<TViewModel>
where TViewModel : ViewModelBase
{
}
编辑:
好吧,从 csproj 文件中删除 <RazorLangVersion>
标签后,它似乎仍然有效。
从ASP.NET Core 6.0 开始,您可以使用以下语法指定泛型类型约束:
@typeparam TModel where TModel : IModel