我有此方法,该方法按预期工作,如果string为空,它不会插入<string, value>
,但是我有一个问题,即该字符串并不总是存在。如果字符串不存在,我想避免附加任何内容。
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(" width=\"", component.style.width + "\"");
当我物理附加字符串时,它将显示为width=""
。我该如何阻止这种情况的发生。
如果将它包装在if语句周围,我可以阻止它出现
if (item.width!= null)
{
sb.AppendIfNotNull(" width=\"", item.width + "\"");
}
对象示例。属性可能存在于一个对象中,但可能不存在于下一个对象中。例如如果颜色不存在,请不要添加颜色:
{
'id': 'Test',
'type': 'Text',
'style': {
'color': 'black'
'textSize': '12'
}
},
{
'id': 'Test',
'type': 'Text',
'style': {
'textSize': '12'
}
}
答案 0 :(得分:2)
您可以将添加的内容从string prefix
更改为接受TValue
并返回string
的函数
public static class StringBuilderExtension
{
public static void AppendIfNotNull<TValue>(this StringBuilder sb, TValue value, Func<TValue, string> transform)
where TValue : class
{
if (value != null)
{
sb.Append( transform( value ));
}
}
}
在这种情况下,只有当您实际拥有有效值时,才会调用转换
使用它的示例方式可能是
sb.AppendIfNotNull( token.style?.width, value => $" width=\"{value}\"" );
?
暗示有条件的空检查(因此,如果token.style
为空,那么它也将为空)
我在dotnetfiddle上添加了一个小样本,其中确实删除了通用类型限制(因为我在;里加了数字))
答案 1 :(得分:0)
无法使用当前方法签名来实现,但是您可以分别传递前缀,您的值和后缀:
myname