首页 > 解决方案 > 在 Stringbuilder 中附加密钥对。AddIfNotNull 方法

问题描述

你好我有下面的方法。它只是检查密钥对值是否为空,但出现错误:Cannot convert TValue to TKey

public static class DictionaryExtension
    {
        public static void AddIfNotNull<TKey, TValue>(TKey key, TValue value)
            where TValue : class 
        {
            if (value != null)
            {
                key = value;
            }
        }
    }

我试图在不将所有属性包装在 if 语句中的情况下实现以下目标。

 public string myObject(Root token)
    {

        StringBuilder sb = new StringBuilder();
        if (token.backgroundColor != null)
        {
            sb.Append("background-color= " + token.backgroundColor);
        }
        if (token.text != null)
        {
            sb.Append("text-size= " + token.text);
        }
        return sb.ToString();
}

例如,我想调用 AddIfNotNull

AddIfNotNull(sb.Append("background-color= " + token.text));我知道这是错误的,但这是我想要实现的。而不是在我的 if 语句中包装所有内容,我只想调用一个处理空值和不存在键的方法

标签: c#dictionary

解决方案


要制作有效的扩展方法,您需要使用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=");

推荐阅读