You could create your own StringBuilder
extension method that remembers the last string appended:
public static class StringBuilderExtensions
{
public static string LastStringAppended { get; private set; }
public static StringBuilder AppendRemember(this StringBuilder sb, object obj)
{
string s = obj == null ? "" : obj.ToString();
LastStringAppended = s;
return sb.Append(s);
}
}
Call it like this
sb.AppendRemember("hello").AppendRemember(" world");
string lastString = StringBuilderExtensions.LastStringAppended;
However, note that the last string will be remembered globally. It is not bound to a StringBuilder
instance.
If you need to remember the last addition per StringBuilder
instance, you can attach an additional "property" to the StringBuilder
via a dictionary. I am using this implementation of ObjectReferenceEqualityComparer<T>
. It is necessary beacuse StringBuilder
overrides Equals
and does not use reference equality.
public static class StringBuilderExtensions
{
private static Dictionary<StringBuilder, string> _lastStrings =
new Dictionary<StringBuilder, string>(
new ObjectReferenceEqualityComparer<StringBuilder>());
public static string LastAppended(this StringBuilder sb)
{
string s;
_lastStrings.TryGetValue(sb, out s);
return s; // s is null if not found in the dict.
}
public static StringBuilder AppendRemember(this StringBuilder sb, object obj)
{
string s = obj == null ? "" : obj.ToString();
_lastStrings[sb] = s;
return sb.Append(s);
}
}
Use it like this:
sb.AppendRemember("hello").AppendRemember(" world");
string lastString = sb.LastAppended();