You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET8 Blazor中可空类属性导致int可空,如何获取int值?

.NET 8 Blazor中可空int转int的处理方案

你遇到的核心问题是MyDTO?.RefreshRate返回的是int?(可空值类型),而Timer构造函数需要的是int类型参数。下面是几种直接有效的处理方式:

1. 用空合并运算符指定默认值

如果MyDTO为空时,希望用一个默认的刷新频率(比如1000毫秒),可以直接用??运算符把可空int转成int:

var refreshRate = MyDTO?.RefreshRate ?? 1000;

TruckSearchTimer = new Timer(new TimerCallback(async _ =>
{
    if (!cts.IsCancellationRequested)
    {
        // 业务逻辑
    }
    await InvokeAsync(StateHasChanged);
}), null, refreshRate, refreshRate);

2. 使用GetValueOrDefault()方法

如果接受int的默认值(0),或者想自定义默认值,可以用可空值类型的GetValueOrDefault方法:

// 用int默认值0
var refreshRate = MyDTO?.RefreshRate.GetValueOrDefault();

// 或者指定默认值
var refreshRate = MyDTO?.RefreshRate.GetValueOrDefault(500);

3. 确认非空后直接取值

如果你已经通过if (MyDTO is not null)判断过对象非空,可以用**null包容运算符!**直接取值(确保此时MyDTO一定不为null,否则会抛NullReferenceException):

if (MyDTO is not null)
{
    var refreshRate = MyDTO!.RefreshRate;
    // 初始化Timer
}

关于.Value找不到的问题

int?类型本身确实有.Value属性,但如果直接在未判断HasValue的情况下使用,编译器可能会提示空引用警告,或者你可能在声明变量时出现了推断错误。正确的用法是先判断是否有值:

var refreshRate = MyDTO?.RefreshRate;
if (refreshRate.HasValue)
{
    int rate = refreshRate.Value;
    // 使用rate初始化Timer
}
else
{
    // 处理MyDTO为空的情况,比如不初始化Timer或用默认值
}

内容的提问来源于stack exchange,提问作者GH DevOps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:30:03