C# 在Stringbuilder中追加密钥对。AddIfNotNull方法

C# 在Stringbuilder中追加密钥对。AddIfNotNull方法,c#,dictionary,C#,Dictionary,嗨,我有下面的方法。它只是检查密钥对值是否为null,但出现错误:无法将TValue转换为TKey public static class DictionaryExtension { public static void AddIfNotNull<TKey, TValue>(TKey key, TValue value) where TValue : class { if (value != n

嗨,我有下面的方法。它只是检查密钥对值是否为null,但出现错误:
无法将TValue转换为TKey

public static class DictionaryExtension
    {
        public static void AddIfNotNull<TKey, TValue>(TKey key, TValue value)
            where TValue : class 
        {
            if (value != null)
            {
                key = value;
            }
        }
    }
我想打电话 AddIfNotNull,例如


AddIfNotNull(sb.Append(“background color=“+token.text”)我知道这是错误的,但这正是我努力实现的目标。与在if语句中包装所有内容不同,我只想调用一个处理空值和不存在键的方法来创建有效的扩展方法,您需要对第一个参数使用
this
关键字。这样C#就知道你在扩展哪种类型。我猜您正在尝试扩展StringBuilder类型,所以我会这样做:

public static class StringBuilderExtension
{
    public static void AppendIfNotNull<TValue>(this StringBuilder sb, TValue value, string prefix)
        where TValue : class 
    {
        if (value != null)
        {
            sb.Append(prefix + value);
        }
    }
}
sb.AppendIfNotNull(token.backgroundColor, "background-color=");

不太清楚为什么要将值指定给键?在这种情况下,你真的需要词典吗?@Milen对不起,这是我第一次写分机。我基本上有JToken对,我将其转换为Object,如果值为null或键不存在,则不要附加到我的字符串生成器。请参阅我的更新问题不确定字典是否是您在这种情况下需要的…这接近于我正在寻找的内容,但是这将仅处理背景颜色如何传递键和值,例如sb.Append(键+值);由于将有多个属性编辑答案以适应您的提问谢谢marc,这是个好办法!我更了解扩展。感谢您的解释我如何使它处理int我得到错误“int类型必须是引用类型才能将其用作参数。我始终可以执行ToString(),但不确定这是否是最佳做法只需使用
.ToString()
,或添加一个重载扩展方法,该方法对value参数的类型使用
int
sb.AppendIfNotNull(token.backgroundColor, "background-color=");