c# - 在 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 语句中包装所有内容,我只想调用一个处理空值和不存在键的方法
解决方案
要制作有效的扩展方法,您需要使用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=");
推荐阅读
- ruby - 使用 Gtk 突出显示文本颜色
- python - Python3循环库导入(模块未定义)
- dialogflow-es - Google Actions 与 dialogflow 的集成,从草稿到 alpha 或 beta 的不同行为
- c# - WPF 按钮图像源绑定字符串依赖属性
- c++ - Boost Bundled Properties:我需要为每条边初始化所有属性吗?
- java - 将元素从一个数组列表移动到另一个 java
- c++ - c++中的正弦波生成
- android - AdMob 激励视频广告上限
- excel - SAPUI5 的 Sheetjs;将表格数据导出到电子表格
- router - Snort 错误:spp_session.c(2567) 无法初始化协议会话内存池