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

.NET Framework 4.8泛型函数调用时如何添加字典键存在性校验

问题描述

现有如下函数调用:

FunctionName(List, s => new Class(s, Dictionary[s.Key]));

FunctionName的定义如下:

private void FunctionName<T>(List<T> Data, Func<KeyValuePair<string, object>, T> ClassCreator)
{
    foreach (... entry in ...)
    {
        Data.Add(ClassCreator(entry));
    }
    return;
}

问题在于,FunctionName是泛型函数,无法在其中添加针对KeyNotFoundException的字典键存在性校验(因为它可能处理其他类型变量)。想知道能不能在函数调用环节添加这类校验,实现类似如下逻辑:

如果字典键不存在则用string.Empty,否则取字典对应的值

解决方案

可以直接在传入的lambda表达式里整合TryGetValue的校验逻辑,不需要嵌套调用FunctionName。正确写法如下:

完整语句块写法

FunctionName(List, s => 
{
    object value;
    // 尝试获取字典值,不存在则赋值string.Empty
    if (!Dictionary.TryGetValue(s.Key, out value))
    {
        value = string.Empty;
    }
    return new Class(s, value);
});

简洁三元表达式写法

如果字典值类型与string.Empty兼容,也可以用更紧凑的写法:

FunctionName(List, s => 
    new Class(s, Dictionary.TryGetValue(s.Key, out var value) ? value : string.Empty)
);

注意:用TryGetValue做安全取值比捕获KeyNotFoundException性能更优,异常捕获本身存在额外开销,是字典取值的推荐安全写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:35:43