# Microsoft.Extensions.Primitives

``` diff
 namespace Microsoft.Extensions.Primitives {
     public class CancellationChangeToken : IChangeToken {
-        public IDisposable RegisterChangeCallback(Action<object> callback, object state);
+        public IDisposable RegisterChangeCallback(Action<object?> callback, object? state);
     }
     public static class ChangeToken {
-        public static IDisposable OnChange(Func<IChangeToken> changeTokenProducer, Action changeTokenConsumer);
+        public static IDisposable OnChange(Func<IChangeToken?> changeTokenProducer, Action changeTokenConsumer);
-        public static IDisposable OnChange<TState>(Func<IChangeToken> changeTokenProducer, Action<TState> changeTokenConsumer, TState state);
+        public static IDisposable OnChange<TState>(Func<IChangeToken?> changeTokenProducer, Action<TState> changeTokenConsumer, TState state);
     }
     public class CompositeChangeToken : IChangeToken {
-        public IDisposable RegisterChangeCallback(Action<object> callback, object state);
+        public IDisposable RegisterChangeCallback(Action<object?> callback, object? state);
     }
     public interface IChangeToken {
-        IDisposable RegisterChangeCallback(Action<object> callback, object state);
+        IDisposable RegisterChangeCallback(Action<object?> callback, object? state);
     }
-    public readonly struct StringSegment : IEquatable<string>, IEquatable<StringSegment> {
+    public readonly struct StringSegment : IEquatable<string?>, IEquatable<StringSegment> {
-        public StringSegment(string buffer);
+        public StringSegment(string? buffer);
-        public string Buffer { get; }
+        public string? Buffer { get; }
-        public string Value { get; }
+        public string? Value { get; }
-        public override bool Equals(object obj);
+        public override bool Equals(object? obj);
-        public bool Equals(string text);
+        public bool Equals(string? text);
-        public bool Equals(string text, StringComparison comparisonType);
+        public bool Equals(string? text, StringComparison comparisonType);
-        public static implicit operator StringSegment (string value);
+        public static implicit operator StringSegment (string? value);
     }
-    public readonly struct StringValues : ICollection<string>, IEnumerable, IEnumerable<string>, IEquatable<string>, IEquatable<StringValues>, IEquatable<string[]>, IList<string>, IReadOnlyCollection<string>, IReadOnlyList<string> {
+    public readonly struct StringValues : ICollection<string?>, IEnumerable, IEnumerable<string?>, IEquatable<string?>, IEquatable<StringValues>, IEquatable<string?[]>, IList<string?>, IReadOnlyCollection<string?>, IReadOnlyList<string?> {
-        bool System.Collections.Generic.ICollection<System.String>.IsReadOnly { get; }
+        bool ICollection<string?>.IsReadOnly { get; }
-        string System.Collections.Generic.IList<System.String>.this[int index] { get; set; }
+        string IList<string?>.this[int index] { get; set; }
-        void System.Collections.Generic.ICollection<System.String>.Add(string item);
+        void ICollection<string?>.Add(string item);
-        void System.Collections.Generic.ICollection<System.String>.Clear();
+        void ICollection<string?>.Clear();
-        bool System.Collections.Generic.ICollection<System.String>.Contains(string item);
+        bool ICollection<string?>.Contains(string item);
-        void System.Collections.Generic.ICollection<System.String>.CopyTo(string[] array, int arrayIndex);
+        void ICollection<string?>.CopyTo(string[] array, int arrayIndex);
-        bool System.Collections.Generic.ICollection<System.String>.Remove(string item);
+        bool ICollection<string?>.Remove(string item);
-        IEnumerator<string> System.Collections.Generic.IEnumerable<System.String>.GetEnumerator();
+        IEnumerator<string> IEnumerable<string?>.GetEnumerator();
-        int System.Collections.Generic.IList<System.String>.IndexOf(string item);
+        int IList<string?>.IndexOf(string item);
-        void System.Collections.Generic.IList<System.String>.Insert(int index, string item);
+        void IList<string?>.Insert(int index, string item);
-        void System.Collections.Generic.IList<System.String>.RemoveAt(int index);
+        void IList<string?>.RemoveAt(int index);
-        IEnumerator System.Collections.IEnumerable.GetEnumerator();
+        IEnumerator IEnumerable.GetEnumerator();
-        public string[] ToArray();
+        public string?[] ToArray();
-        public struct Enumerator : IDisposable, IEnumerator, IEnumerator<string> {
+        public struct Enumerator : IDisposable, IEnumerator, IEnumerator<string?> {
-            public string Current { get; }
+            public string? Current { get; }
         }
     }
 }
```

