Browse Source

feat: Address Rule CA1815

Giuseppe Lippolis 2 years ago
parent
commit
7eac150e20
45 changed files with 66 additions and 51 deletions
  1. 1 1
      src/Android/Avalonia.Android/AndroidInputMethod.cs
  2. 6 1
      src/Avalonia.Base/Animation/Cue.cs
  3. 1 1
      src/Avalonia.Base/Data/BindingValue.cs
  4. 2 2
      src/Avalonia.Base/Input/PointerPoint.cs
  5. 1 1
      src/Avalonia.Base/Input/Raw/RawPointerEventArgs.cs
  6. 1 1
      src/Avalonia.Base/Input/TextInput/ITextInputMethodClient.cs
  7. 1 1
      src/Avalonia.Base/Logging/ParametrizedLogger.cs
  8. 1 1
      src/Avalonia.Base/Matrix.cs
  9. 7 1
      src/Avalonia.Base/Media/BoxShadows.cs
  10. 1 1
      src/Avalonia.Base/Media/DrawingContext.cs
  11. 1 1
      src/Avalonia.Base/Media/FontMetrics.cs
  12. 1 1
      src/Avalonia.Base/Media/GlyphMetrics.cs
  13. 1 1
      src/Avalonia.Base/Media/GlyphRunMetrics.cs
  14. 1 1
      src/Avalonia.Base/Media/TextCollapsingCreateInfo.cs
  15. 1 1
      src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs
  16. 1 1
      src/Avalonia.Base/Media/TextFormatting/TextLineMetrics.cs
  17. 1 1
      src/Avalonia.Base/Media/TextFormatting/TextMetrics.cs
  18. 1 1
      src/Avalonia.Base/Media/TextFormatting/TextRange.cs
  19. 1 1
      src/Avalonia.Base/Media/TextFormatting/TextRunBounds.cs
  20. 1 1
      src/Avalonia.Base/Media/TextFormatting/TextShaperOptions.cs
  21. 1 1
      src/Avalonia.Base/Media/TextFormatting/Unicode/Codepoint.cs
  22. 1 1
      src/Avalonia.Base/Media/TextFormatting/Unicode/Grapheme.cs
  23. 1 1
      src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreak.cs
  24. 1 1
      src/Avalonia.Base/Media/TextHitTestResult.cs
  25. 6 6
      src/Avalonia.Base/Media/Transformation/TransformOperation.cs
  26. 1 1
      src/Avalonia.Base/Media/Transformation/TransformOperations.cs
  27. 2 2
      src/Avalonia.Base/Media/UnicodeRange.cs
  28. 1 1
      src/Avalonia.Base/Platform/IRuntimePlatform.cs
  29. 1 1
      src/Avalonia.Base/Rendering/Composition/Transport/BatchStream.cs
  30. 1 1
      src/Avalonia.Base/Styling/SelectorMatch.cs
  31. 1 1
      src/Avalonia.Base/Utilities/ReadOnlySlice.cs
  32. 1 1
      src/Avalonia.Base/Utilities/SmallDictionary.cs
  33. 1 1
      src/Avalonia.Base/Utilities/StringTokenizer.cs
  34. 1 1
      src/Avalonia.Base/Utilities/SynchronousCompletionAsyncResult.cs
  35. 1 1
      src/Avalonia.Base/Utilities/ValueSpan.cs
  36. 1 1
      src/Avalonia.Controls/AcrylicPlatformCompensationLevels.cs
  37. 1 1
      src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs
  38. 1 1
      src/Avalonia.Controls/Selection/ISelectionModel.cs
  39. 1 1
      src/Avalonia.Controls/Selection/SelectionModel.cs
  40. 1 1
      src/Avalonia.Controls/TextBlock.cs
  41. 2 0
      src/Avalonia.FreeDesktop/IX11InputMethod.cs
  42. 1 1
      src/Avalonia.OpenGL/GlVersion.cs
  43. 3 1
      src/Avalonia.X11/X11Structs.cs
  44. 1 1
      src/Windows/Avalonia.Direct2D1/OptionalDispose.cs
  45. 1 1
      src/Windows/Avalonia.Win32/WinRT/WinRTColor.cs

+ 1 - 1
src/Android/Avalonia.Android/AndroidInputMethod.cs

@@ -167,7 +167,7 @@ namespace Avalonia.Android
         }
     }
 
-    public readonly struct ComposingRegion
+    public readonly record struct ComposingRegion
     {
         private readonly int _start = -1;
         private readonly int _end = -1;

+ 6 - 1
src/Avalonia.Base/Animation/Cue.cs

@@ -8,7 +8,7 @@ namespace Avalonia.Animation
     /// Determines the time index for a <see cref="KeyFrame"/>. 
     /// </summary>
     [TypeConverter(typeof(CueTypeConverter))]
-    public readonly struct Cue : IEquatable<Cue>, IEquatable<double>
+    public readonly record struct Cue : IEquatable<Cue>, IEquatable<double>
     {
         /// <summary>
         /// The normalized percent value, ranging from 0.0 to 1.0
@@ -68,6 +68,11 @@ namespace Avalonia.Animation
         {
             return CueValue == other;
         }
+
+        public override int GetHashCode()
+        {
+            return CueValue.GetHashCode();
+        }
     }
 
     public class CueTypeConverter : TypeConverter

+ 1 - 1
src/Avalonia.Base/Data/BindingValue.cs

@@ -80,7 +80,7 @@ namespace Avalonia.Data
     /// - For an unset value, use <see cref="Unset"/> or simply `default`
     /// - For other types, call one of the static factory methods
     /// </remarks>
-    public readonly struct BindingValue<T>
+    public readonly record struct BindingValue<T>
     {
         private readonly T _value;
 

+ 2 - 2
src/Avalonia.Base/Input/PointerPoint.cs

@@ -5,7 +5,7 @@ namespace Avalonia.Input
     /// <summary>
     /// Provides basic properties for the input pointer associated with a single mouse, pen/stylus, or touch contact.
     /// </summary>
-    public struct PointerPoint
+    public record struct PointerPoint
     {
         public PointerPoint(IPointer pointer, Point position, PointerPointProperties properties)
         {
@@ -33,7 +33,7 @@ namespace Avalonia.Input
     /// <summary>
     /// Provides extended properties for a PointerPoint object.
     /// </summary>
-    public struct PointerPointProperties
+    public record struct PointerPointProperties
     {
         /// <summary>
         /// Gets a value that indicates whether the pointer input was triggered by the primary action mode of an input device.

+ 1 - 1
src/Avalonia.Base/Input/Raw/RawPointerEventArgs.cs

@@ -130,7 +130,7 @@ namespace Avalonia.Input.Raw
         internal IInputElement? InputHitTestResult { get; set; }
     }
 
-    public struct RawPointerPoint
+    public record struct RawPointerPoint
     {
         /// <summary>
         /// Pointer position, in client DIPs.

+ 1 - 1
src/Avalonia.Base/Input/TextInput/ITextInputMethodClient.cs

@@ -46,7 +46,7 @@ namespace Avalonia.Input.TextInput
         void SelectInSurroundingText(int start, int end);
     }
 
-    public struct TextInputMethodSurroundingText
+    public record struct TextInputMethodSurroundingText
     {
         public string Text { get; set; }
         public int CursorOffset { get; set; }

+ 1 - 1
src/Avalonia.Base/Logging/ParametrizedLogger.cs

@@ -5,7 +5,7 @@ namespace Avalonia.Logging
     /// <summary>
     /// Logger sink parametrized for given logging level.
     /// </summary>
-    public readonly struct ParametrizedLogger
+    public readonly record struct ParametrizedLogger
     {
         private readonly ILogSink _sink;
         private readonly LogEventLevel _level;

+ 1 - 1
src/Avalonia.Base/Matrix.cs

@@ -571,7 +571,7 @@ namespace Avalonia
             return true;
         }
 
-        public struct Decomposed
+        public record struct Decomposed
         {
             public Vector Translate;
             public Vector Scale;

+ 7 - 1
src/Avalonia.Base/Media/BoxShadows.cs

@@ -62,7 +62,7 @@ namespace Avalonia.Media
         }
 
         [EditorBrowsable(EditorBrowsableState.Never)]
-        public struct BoxShadowsEnumerator
+        public record struct BoxShadowsEnumerator
         {
             private int _index;
             private BoxShadows _shadows;
@@ -149,5 +149,11 @@ namespace Avalonia.Media
                 return hashCode;
             }
         }
+
+        public static bool operator ==(BoxShadows left, BoxShadows right) => 
+            left.Equals(right);
+
+        public static bool operator !=(BoxShadows left, BoxShadows right) =>
+            !(left == right);
     }
 }

+ 1 - 1
src/Avalonia.Base/Media/DrawingContext.cs

@@ -261,7 +261,7 @@ namespace Avalonia.Media
             DrawRectangle(brush, null, rect, cornerRadius, cornerRadius);
         }
 
-        public readonly struct PushedState : IDisposable
+        public readonly record struct PushedState : IDisposable
         {
             private readonly int _level;
             private readonly DrawingContext _context;

+ 1 - 1
src/Avalonia.Base/Media/FontMetrics.cs

@@ -3,7 +3,7 @@
     /// <summary>
     /// The font metrics is holding information about a font's ascent, descent, etc. in design em units.
     /// </summary>
-    public readonly struct FontMetrics
+    public readonly record struct FontMetrics
     {
         /// <summary>
         ///     Gets the font design units per em.

+ 1 - 1
src/Avalonia.Base/Media/GlyphMetrics.cs

@@ -1,6 +1,6 @@
 namespace Avalonia.Media;
 
-public readonly struct GlyphMetrics
+public readonly record struct GlyphMetrics
 {
     /// <summary>
     /// Distance from the x-origin to the left extremum of the glyph.

+ 1 - 1
src/Avalonia.Base/Media/GlyphRunMetrics.cs

@@ -1,6 +1,6 @@
 namespace Avalonia.Media
 {
-    public readonly struct GlyphRunMetrics
+    public readonly record struct GlyphRunMetrics
     {
         public GlyphRunMetrics(double width, double widthIncludingTrailingWhitespace, int trailingWhitespaceLength,
             int newlineLength, double height)

+ 1 - 1
src/Avalonia.Base/Media/TextCollapsingCreateInfo.cs

@@ -2,7 +2,7 @@
 
 namespace Avalonia.Media
 {
-    public readonly struct TextCollapsingCreateInfo
+    public readonly record struct TextCollapsingCreateInfo
     {
         public readonly double Width;
         public readonly TextRunProperties TextRunProperties;

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/ShapedBuffer.cs

@@ -255,7 +255,7 @@ namespace Avalonia.Media.TextFormatting
         }
     }
 
-    public readonly struct GlyphInfo
+    public readonly record struct GlyphInfo
     {
         public GlyphInfo(ushort glyphIndex, int glyphCluster, double glyphAdvance = 0, Vector glyphOffset = default)
         {

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/TextLineMetrics.cs

@@ -4,7 +4,7 @@
     /// Represents a metric for a <see cref="TextLine"/> objects,
     /// that holds information about ascent, descent, line gap, size and origin of the text line.
     /// </summary>
-    public readonly struct TextLineMetrics
+    public readonly record struct TextLineMetrics
     {
         public TextLineMetrics(bool hasOverflowed, double height, int newLineLength, double start, double textBaseline,
             int trailingWhitespaceLength, double width,

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/TextMetrics.cs

@@ -3,7 +3,7 @@
     /// <summary>
     /// A metric that holds information about text specific measurements.
     /// </summary>
-    public readonly struct TextMetrics
+    public readonly record struct TextMetrics
     {
         public TextMetrics(Typeface typeface, double fontRenderingEmSize)
         {

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/TextRange.cs

@@ -5,7 +5,7 @@ namespace Avalonia.Media.TextFormatting
     /// <summary>
     /// References a portion of a text buffer.
     /// </summary>
-    public readonly struct TextRange
+    public readonly record struct TextRange
     {
         public TextRange(int start, int length)
         {

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/TextRunBounds.cs

@@ -3,7 +3,7 @@
     /// <summary>
     /// The bounding rectangle of text run
     /// </summary>
-    public readonly struct TextRunBounds
+    public readonly record struct TextRunBounds
     {
         /// <summary>
         /// Constructing TextRunBounds

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/TextShaperOptions.cs

@@ -5,7 +5,7 @@ namespace Avalonia.Media.TextFormatting
     /// <summary>
     /// Options to customize text shaping.
     /// </summary>
-    public readonly struct TextShaperOptions
+    public readonly record struct TextShaperOptions
     {
         public TextShaperOptions(
             IGlyphTypeface typeface, 

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/Unicode/Codepoint.cs

@@ -4,7 +4,7 @@ using Avalonia.Utilities;
 
 namespace Avalonia.Media.TextFormatting.Unicode
 {
-    public readonly struct Codepoint
+    public readonly record struct Codepoint
     {
         private readonly uint _value;
 

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/Unicode/Grapheme.cs

@@ -5,7 +5,7 @@ namespace Avalonia.Media.TextFormatting.Unicode
     /// <summary>
     /// Represents the smallest unit of a writing system of any given language.
     /// </summary>
-    public readonly struct Grapheme
+    public readonly record struct Grapheme
     {
         public Grapheme(Codepoint firstCodepoint, ReadOnlySlice<char> text)
         {

+ 1 - 1
src/Avalonia.Base/Media/TextFormatting/Unicode/LineBreak.cs

@@ -24,7 +24,7 @@ namespace Avalonia.Media.TextFormatting.Unicode
     /// Information about a potential line break position
     /// </summary>
     [DebuggerDisplay("{PositionMeasure}/{PositionWrap} @ {Required}")]
-    public readonly struct LineBreak
+    public readonly record struct LineBreak
     {
         /// <summary>
         /// Constructor

+ 1 - 1
src/Avalonia.Base/Media/TextHitTestResult.cs

@@ -5,7 +5,7 @@ namespace Avalonia.Media
     /// <summary>
     /// Holds a hit test result from a <see cref="TextLayout"/>.
     /// </summary>
-    public readonly struct TextHitTestResult
+    public readonly record struct TextHitTestResult
     {
         public TextHitTestResult(CharacterHit characterHit, int textPosition, bool isInside, bool isTrailing)
         {

+ 6 - 6
src/Avalonia.Base/Media/Transformation/TransformOperation.cs

@@ -5,7 +5,7 @@ namespace Avalonia.Media.Transformation
     /// <summary>
     /// Represents a single primitive transform (like translation, rotation, scale, etc.).
     /// </summary>
-    public struct TransformOperation
+    public record struct TransformOperation
     {
         public OperationType Type;
         public Matrix Matrix;
@@ -196,7 +196,7 @@ namespace Avalonia.Media.Transformation
         }
 
         [StructLayout(LayoutKind.Explicit)]
-        public struct DataLayout
+        public record struct DataLayout
         {
             [FieldOffset(0)] public SkewLayout Skew;
 
@@ -206,25 +206,25 @@ namespace Avalonia.Media.Transformation
 
             [FieldOffset(0)] public RotateLayout Rotate;
 
-            public struct SkewLayout
+            public record struct SkewLayout
             {
                 public double X;
                 public double Y;
             }
 
-            public struct ScaleLayout
+            public record struct ScaleLayout
             {
                 public double X;
                 public double Y;
             }
 
-            public struct TranslateLayout
+            public record struct TranslateLayout
             {
                 public double X;
                 public double Y;
             }
 
-            public struct RotateLayout
+            public record struct RotateLayout
             {
                 public double Angle;
             }

+ 1 - 1
src/Avalonia.Base/Media/Transformation/TransformOperations.cs

@@ -165,7 +165,7 @@ namespace Avalonia.Media.Transformation
             return Math.Max(from._operations.Count, to._operations.Count);
         }
 
-        public readonly struct Builder
+        public readonly record struct Builder
         {
             private readonly List<TransformOperation> _operations;
 

+ 2 - 2
src/Avalonia.Base/Media/UnicodeRange.cs

@@ -7,7 +7,7 @@ namespace Avalonia.Media
     /// <summary>
     /// The <see cref="UnicodeRange"/> descripes a set of Unicode characters.
     /// </summary>
-    public readonly struct UnicodeRange
+    public readonly record struct UnicodeRange
     {
         public readonly static UnicodeRange Default = Parse("0-10FFFD");
 
@@ -102,7 +102,7 @@ namespace Avalonia.Media
         }
     }
 
-    public readonly struct UnicodeRangeSegment
+    public readonly record struct UnicodeRangeSegment
     {
         private static Regex s_regex = new Regex(@"^(?:[uU]\+)?(?:([0-9a-fA-F](?:[0-9a-fA-F?]{1,5})?))$");
 

+ 1 - 1
src/Avalonia.Base/Platform/IRuntimePlatform.cs

@@ -21,7 +21,7 @@ namespace Avalonia.Platform
     }
 
     [Unstable]
-    public struct RuntimePlatformInfo
+    public record struct RuntimePlatformInfo
     {
         public OperatingSystemType OperatingSystem { get; set; }
 

+ 1 - 1
src/Avalonia.Base/Rendering/Composition/Transport/BatchStream.cs

@@ -21,7 +21,7 @@ internal class BatchStreamData
     public Queue<BatchStreamSegment<IntPtr>> Structs { get; } = new();
 }
 
-public struct BatchStreamSegment<TData>
+public record struct BatchStreamSegment<TData>
 {
     public TData Data { get; set; }
     public int ElementCount { get; set; }

+ 1 - 1
src/Avalonia.Base/Styling/SelectorMatch.cs

@@ -43,7 +43,7 @@ namespace Avalonia.Styling
     /// A selector match describes whether and how a <see cref="Selector"/> matches a control, and
     /// in addition whether the selector can ever match a control of the same type.
     /// </remarks>
-    public readonly struct SelectorMatch
+    public readonly record struct SelectorMatch
     {
         /// <summary>
         /// A selector match with the result of <see cref="SelectorMatchResult.NeverThisType"/>.

+ 1 - 1
src/Avalonia.Base/Utilities/ReadOnlySlice.cs

@@ -11,7 +11,7 @@ namespace Avalonia.Utilities
     /// </summary>
     /// <typeparam name="T">The type of elements in the slice.</typeparam>
     [DebuggerTypeProxy(typeof(ReadOnlySlice<>.ReadOnlySliceDebugView))]
-    public readonly struct ReadOnlySlice<T> : IReadOnlyList<T> where T : struct
+    public readonly record struct ReadOnlySlice<T> : IReadOnlyList<T> where T : struct
     {
         private readonly int _bufferOffset;
         

+ 1 - 1
src/Avalonia.Base/Utilities/SmallDictionary.cs

@@ -5,7 +5,7 @@ using System.Diagnostics.CodeAnalysis;
 
 namespace Avalonia.Utilities;
 
-public struct InlineDictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>> where TKey : class where TValue : class
+public record struct InlineDictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>> where TKey : class where TValue : class
 {
     object? _data;
     TValue? _value;

+ 1 - 1
src/Avalonia.Base/Utilities/StringTokenizer.cs

@@ -8,7 +8,7 @@ namespace Avalonia.Utilities
 #if !BUILDTASK
     public
 #endif
-    struct StringTokenizer : IDisposable
+    record struct StringTokenizer : IDisposable
     {
         private const char DefaultSeparatorChar = ',';
 

+ 1 - 1
src/Avalonia.Base/Utilities/SynchronousCompletionAsyncResult.cs

@@ -8,7 +8,7 @@ namespace Avalonia.Utilities
     /// A task-like operation that is guaranteed to finish continuations synchronously,
     /// can be used for parametrized one-shot events
     /// </summary>
-    public struct SynchronousCompletionAsyncResult<T> : INotifyCompletion
+    public record struct SynchronousCompletionAsyncResult<T> : INotifyCompletion
     {
         private readonly SynchronousCompletionAsyncResultSource<T>? _source;
         private readonly T? _result;

+ 1 - 1
src/Avalonia.Base/Utilities/ValueSpan.cs

@@ -3,7 +3,7 @@
     /// <summary>
     /// Pairing of value and positions sharing that value.
     /// </summary>
-    public readonly struct ValueSpan<T>
+    public readonly record struct ValueSpan<T>
     {
         public ValueSpan(int start, int length, T value)
         {

+ 1 - 1
src/Avalonia.Controls/AcrylicPlatformCompensationLevels.cs

@@ -5,7 +5,7 @@
     /// It controls the base opacity level of the 'tracing paper' layer that compensates
     /// for low blur radius.
     /// </summary>
-    public struct AcrylicPlatformCompensationLevels
+    public record struct AcrylicPlatformCompensationLevels
     {
         public AcrylicPlatformCompensationLevels(double transparent, double blurred, double acrylic)
         {

+ 1 - 1
src/Avalonia.Controls/Primitives/PopupPositioning/IPopupPositioner.cs

@@ -64,7 +64,7 @@ namespace Avalonia.Controls.Primitives.PopupPositioning
     /// surface.
     /// </remarks>
     [Unstable]
-    public struct PopupPositionerParameters
+    public record struct PopupPositionerParameters
     {
         private PopupGravity _gravity;
         private PopupAnchor _anchor;

+ 1 - 1
src/Avalonia.Controls/Selection/ISelectionModel.cs

@@ -39,7 +39,7 @@ namespace Avalonia.Controls.Selection
             return new BatchUpdateOperation(model);
         }
 
-        public struct BatchUpdateOperation : IDisposable
+        public record struct BatchUpdateOperation : IDisposable
         {
             private readonly ISelectionModel _owner;
             private bool _isDisposed;

+ 1 - 1
src/Avalonia.Controls/Selection/SelectionModel.cs

@@ -738,7 +738,7 @@ namespace Avalonia.Controls.Selection
             }
         }
 
-        public struct BatchUpdateOperation : IDisposable
+        public record struct BatchUpdateOperation : IDisposable
         {
             private readonly SelectionModel<T> _owner;
             private bool _isDisposed;

+ 1 - 1
src/Avalonia.Controls/TextBlock.cs

@@ -827,7 +827,7 @@ namespace Avalonia.Controls
             InvalidateTextLayout();
         }
 
-        protected readonly struct SimpleTextSource : ITextSource
+        protected readonly record struct SimpleTextSource : ITextSource
         {
             private readonly ReadOnlySlice<char> _text;
             private readonly TextRunProperties _defaultProperties;

+ 2 - 0
src/Avalonia.FreeDesktop/IX11InputMethod.cs

@@ -11,7 +11,9 @@ namespace Avalonia.FreeDesktop
         (ITextInputMethodImpl method, IX11InputMethodControl control) CreateClient(IntPtr xid);
     }
 
+#pragma warning disable CA1815 // Override equals and operator equals on value types
     public struct X11InputMethodForwardedKey
+#pragma warning restore CA1815 // Override equals and operator equals on value types
     {
         public int KeyVal { get; set; }
         public KeyModifiers Modifiers { get; set; }

+ 1 - 1
src/Avalonia.OpenGL/GlVersion.cs

@@ -6,7 +6,7 @@ namespace Avalonia.OpenGL
         OpenGLES
     }
     
-    public struct GlVersion
+    public record struct GlVersion
     {
         public GlProfileType Type { get; }
         public int Major { get; }

+ 3 - 1
src/Avalonia.X11/X11Structs.cs

@@ -1768,7 +1768,9 @@ namespace Avalonia.X11 {
 	}
     
     [StructLayout(LayoutKind.Sequential)]
+#pragma warning disable CA1815 // Override equals and operator equals on value types
     public unsafe struct XImage
+#pragma warning restore CA1815 // Override equals and operator equals on value types
     {
         public int width, height; /* size of image */
         public int xoffset; /* number of pixels offset in X direction */
@@ -1799,7 +1801,7 @@ namespace Avalonia.X11 {
         internal IntPtr green_mask;
         internal IntPtr blue_mask;
         internal int colormap_size;
-        internal int bits_per_rgb;		
+        internal int bits_per_rgb;
     }
 	
 	internal enum XIMFeedback

+ 1 - 1
src/Windows/Avalonia.Direct2D1/OptionalDispose.cs

@@ -2,7 +2,7 @@
 
 namespace Avalonia.Direct2D1
 {
-    public readonly struct OptionalDispose<T> : IDisposable where T : IDisposable
+    public readonly record struct OptionalDispose<T> : IDisposable where T : IDisposable
     {
         private readonly bool _dispose;
 

+ 1 - 1
src/Windows/Avalonia.Win32/WinRT/WinRTColor.cs

@@ -3,7 +3,7 @@
 namespace Avalonia.Win32.WinRT
 {
     [StructLayout(LayoutKind.Sequential, Pack = 1)]
-    public struct WinRTColor
+    public record struct WinRTColor
     {
         public byte A;
         public byte R;