嗨,我有以下方法。它只是检查密钥对值是否为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语句中,我只想调用一个处理空值和不存在的键的方法
答案 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=");