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

C#中是否有对应Java Optional.ifPresent的Nullable类型等效方法?

C# 对应Java Optional.ifPresent的实现方案

C# 原生没有内置针对可空类型(Nullable)的等效ifPresent方法,但可以通过两种方式实现更优雅的调用逻辑:

方案1:自定义通用扩展方法(推荐)

你可以为所有可空值类型封装统一的IfPresent扩展方法,实现和Java完全一致的调用体验:

public static class NullableExtensions
{
    public static void IfPresent<T>(this T? value, Action<T> action) 
        where T : struct
    {
        if (value.HasValue)
        {
            action(value.Value);
        }
    }
}

调用方式非常简洁:

Guid? alias1 = // 获取可能为null的Guid
alias1.IfPresent(DoProcessingWithValue);
// 也支持lambda写法自定义逻辑:
// alias1.IfPresent(v => { /* 自定义处理逻辑 */ });

方案2:模式匹配简化写法(无需额外定义扩展)

如果你不想新增扩展类,也可以用C# 6及以上支持的模式匹配简化原有if判断,省去显式调用.Value的步骤:

if (alias1 is {} validAlias)
{
    DoProcessingWithValue(validAlias);
}

可空引用类型兼容说明

如果需要同时支持C# 8+的可空引用类型,可以扩展上述工具类同时覆盖引用类型场景:

public static class NullableExtensions
{
    // 适配可空值类型
    public static void IfPresent<T>(this T? value, Action<T> action) 
        where T : struct
    {
        if (value.HasValue) action(value.Value);
    }

    // 适配可空引用类型
    public static void IfPresent<T>(this T? value, Action<T> action) 
        where T : class
    {
        if (value is not null) action(value);
    }
}

内容的提问来源于stack exchange,提问作者Michael Wiles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:54:03