首页 > 解决方案 > 将 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。

标签: c#.net-corestringbuilderimplicit-conversion

解决方案


使用不与适用的实例方法冲突的不同名称的扩展方法。要么包装原始的扩展方法,要么重新实现它,因为它是微不足道的。

using Microsoft.Extensions.Primitives;

public static StringBuilder AppendSegment(this StringBuilder builder, StringSegment segment)
{
    return Extensions.Append(builder, segment);
}

推荐阅读