在Stringbuilder中附加密钥对。 AddIfNotNull方法

时间:2019-05-01 08:16:01

标签: c# dictionary

嗨,我有以下方法。它只是检查密钥对值是否为null,但是会出错: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语句中,我只想调用一个处理空值和不存在的键的方法

1 个答案:

答案 0 :(得分:1)

要创建有效的扩展方法,您需要对第一个参数使用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=");
相关问题