C#中是否有对应Java Optional.ifPresent的Nullable类型等效方法?
C# 对应Java Optional.ifPresent的实现方案
C# 原生没有内置针对可空类型(NullableifPresent方法,但可以通过两种方式实现更优雅的调用逻辑:
方案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
相关产品推荐
相关产品推荐

