@@ -72,8 +72,14 @@ public ExpressionHasher Add(ReadOnlySpan<char> span)
7272
7373 public string Compute ( )
7474 {
75+ #if NET8_0_OR_GREATER
7576 var hashBytes = MD5 . HashData ( _buffer . AsSpan ( ) . Slice ( 0 , _start ) ) ;
7677 var hashString = Convert . ToHexString ( hashBytes ) . ToLowerInvariant ( ) ;
78+ #else
79+ var md5 = MD5 . Create ( ) ;
80+ var hashBytes = md5 . ComputeHash ( _buffer , 0 , _start ) ;
81+ var hashString = BitConverter . ToString ( hashBytes ) . Replace ( "-" , "" ) . ToLowerInvariant ( ) ;
82+ #endif
7783
7884 _buffer . AsSpan ( ) . Slice ( 0 , _start ) . Clear ( ) ;
7985
@@ -281,6 +287,7 @@ private void Append(char a, char b)
281287 _buffer [ _start ++ ] = ( byte ) b ;
282288 }
283289
290+ #if NET8_0_OR_GREATER
284291 private void Append ( string s )
285292 {
286293 var span = _buffer . AsSpan ( ) . Slice ( _start ) ;
@@ -316,6 +323,47 @@ private void Append(ReadOnlySpan<char> s)
316323 _start += written ;
317324 }
318325
326+ #else
327+ private void Append ( string s )
328+ {
329+ byte [ ] ? utf8Bytes = null ;
330+
331+ try
332+ {
333+ utf8Bytes = Encoding . UTF8 . GetBytes ( s ) ;
334+ EnsureBufferCapacity ( utf8Bytes . Length ) ;
335+
336+ Buffer . BlockCopy ( utf8Bytes , 0 , _buffer , _start , utf8Bytes . Length ) ;
337+ _start += utf8Bytes . Length ;
338+ }
339+ finally
340+ {
341+ if ( utf8Bytes != null )
342+ {
343+ ArrayPool < byte > . Shared . Return ( utf8Bytes ) ;
344+ }
345+ }
346+ }
347+
348+ private void Append ( ReadOnlySpan < char > s )
349+ {
350+ // Converting ReadOnlySpan<char> to string for .NET Standard 2.0 compatibility
351+ var str = new string ( s . ToArray ( ) ) ;
352+ Append ( str ) ;
353+ }
354+
355+ private void EnsureBufferCapacity ( int requiredCapacity )
356+ {
357+ while ( _buffer . Length - _start < requiredCapacity )
358+ {
359+ var newBuffer = ArrayPool < byte > . Shared . Rent ( _buffer . Length * 2 ) ;
360+ Buffer . BlockCopy ( _buffer , 0 , newBuffer , 0 , _start ) ;
361+ ArrayPool < byte > . Shared . Return ( _buffer ) ;
362+ _buffer = newBuffer ;
363+ }
364+ }
365+ #endif
366+
319367 private void Append ( byte b )
320368 {
321369 if ( _start == _buffer . Length )
0 commit comments