c# - 将 StringSegment 附加到 StringBuilder
问题描述
我有一个StringSegment
并且需要将它附加到一个StringBuilder
实例。想要使用作为 Microsoft.Extensions.Primitives 一部分的StringBuilder.Append(StringSegment)
扩展方法,但作为实际实例方法的两个重载StringBuilder
优先。
中定义的隐式转换运算符StringSegment
是罪魁祸首。他们不允许我自然地使用预期的扩展名,而且他们使调用在StringBuilder.Append(ReadOnlyMemory<char>)
and之间StringBuilder.Append(ReadOnlySpan<char>)
产生歧义,需要强制转换来消除歧义。
我知道我可以
using static Microsoft.Extensions.Primitives.Extensions;
Append(stringBuilder, stringSegment);
但这读起来不自然,因此在某种程度上违背了扩展方法的目的。我也可以内联扩展方法并StringBuilder.Append(string, int, int)
直接调用重载,但由于健谈,感觉更糟。
有没有办法附加读取自然且简洁的字符串段?
如果有任何区别,请使用 .NET Core 3.1 和 C# 8。
解决方案
使用不与适用的实例方法冲突的不同名称的扩展方法。要么包装原始的扩展方法,要么重新实现它,因为它是微不足道的。
using Microsoft.Extensions.Primitives;
public static StringBuilder AppendSegment(this StringBuilder builder, StringSegment segment)
{
return Extensions.Append(builder, segment);
}
推荐阅读
- java - 在提取的实体列表中查找重复项
- c# - 控制器名称与项目解决方案中的文件夹冲突
- php - 运行 shell_exec() 在 Google Cloud Compute VM Instance 上执行 python 脚本
- android - 在android中创建从上到下到状态栏和工具栏的线性渐变
- java - 使用 JAVA 从 JSON 获取 14 位小数
- python - 排序(重新排列)列表
- microsoft-graph-api - Outlook 加载项的“代表用户获取访问权限”
- c# - 在列表中获取最小值但大于 0 的有效方法是什么?
- r - 如何转换数据并使用 geom_tile 创建热图?
- sql - 如何在 groovy 中对 SQL 查询使用缓存?