首页 > 解决方案 > 如果 get 函数中不存在键值对,如何创建它?

问题描述

我有一个 get api,如下所示:

bool GetValue<T>(string key, out T value);

如果值存在,则返回,value函数返回true。否则,value设置为default(T)并且函数返回 false。

同样,我有 set api:

bool SetValue<T>(string key, T value);

因此,目前我正在使用这个:

var exists = GetValue<Details>(@"ProductDetails", out var result);
if (!exists)
{
    _details = new Details();
    SetValue(@"ProductDetails", _details);
}
else
{
    _details = result;
}

我想创建一个在一行中执行此操作的函数。也就是说,如果该值不存在,它会使用给定的参数创建一个新值并将其存储。

我怎样才能做到这一点 ?

标签: c#

解决方案


private T GetOrCreate<T>(string tableName)
    where T : new()
{
    T result;

    var exists = GetValue<T>(tableName, out result);
    if (!exists)
    {
        result = new T();
        SetValue(tableName, result);
    }

    return result;
}

应该这样做,使用通用约束来确保T.


推荐阅读