当我尝试生成 Blazor 组件时,我可以像这样为它定义参数:
@code {
[Parameter]
public string MyString { get; set; }
}
我的问题是,我是否可以将此参数设置为必需参数,以便在使用组件时,除非我提供指定的参数,否则不会生成项目?这是我应该担心的事情吗?我想我可以处理组件初始化中的任何无效值,如果值没有像这样提供,可能会抛出异常:
protected override void OnInitialized()
{
base.OnInitialized();
if (string.IsNullOrWhiteSpace(MyString)) {
// throw an exception here...
}
}
但这是处理这个问题的正确方法吗?
.NET 6 及更高
版本这可以通过[EditorRequired]
属性来实现。例:
[Parameter, EditorRequired]
public string Name { get; set; }
这将向组件的使用者发出 IDE 警告,指出如果未提供参数,则缺少参数。
在 .NET 6 之前
目前,您必须完全按照您所说的进行操作。
我喜欢将[EditorRequired]
与初始值null!
结合起来。
[Parameter, EditorRequired]
public string MyString { get; set; } = null!;
从技术上讲,该值在运行OnInitialized()
之前将为 null,例如在构造函数中。不过,这比在其他任何地方将其视为可能为空更方便。
还没有,没有。您目前能做的最好的事情就是在SetParametersAsync
中抛出异常。
Blazor 大学上有一节介绍可选路由参数,介绍如何检查参数是否已传递。您只需将其设置为可为空并检查它是否为空即可。 https://blazor-university.com/routing/optional-route-parameters/
或者,如果 overrideSetParametersAsync
传递了ParameterView parameters
参数,则可以使用parameters.TryGetValue
来确定是否传递了参数,如果未传递,则引发异常。
但目前没有办法导致编译时错误。
正如@BenSampica所说,必须等到 .NET 6 才能做到这一点,但您可以使用
[Parameter]
public string MyString { get; set; } = null!;
目前。不会生成编译器错误,但也不会让您使用它。
我们发现,将其添加到.csproj
允许我们将警告视为构建错误。
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<!-- Violations of EditorRequired (RZ2012) are turned into true errors -->
<!-- https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/errors-warnings -->
<WarningsAsErrors>RZ2012</WarningsAsErrors>
</PropertyGroup>