Forge
csharpdeeb25a2
1#nullable enable
2
3namespace CascadeIDE.Models.Editor;
4
5/// <summary>Закрытый 1-based диапазон строк редактора: <see cref="Start"/> ≤ <see cref="End"/> (инклюзивно с обеих сторон).</summary>
6public readonly struct LineRange : IEquatable<LineRange>
7{
8 public LineNumber Start { get; }
9
10 public LineNumber End { get; }
11
12 private LineRange(LineNumber start, LineNumber end)
13 {
14 Start = start;
15 End = end;
16 }
17
18 /// <summary>Отказ, если <paramref name="end"/> &lt; <paramref name="start"/>.</summary>
19 public static bool TryCreate(LineNumber start, LineNumber end, out LineRange range)
20 {
21 if (end.Value < start.Value)
22 {
23 range = default;
24 return false;
25 }
26
27 range = new LineRange(start, end);
28 return true;
29 }
30
31 public bool Equals(LineRange other) => Start.Equals(other.Start) && End.Equals(other.End);
32
33 public override bool Equals(object? obj) => obj is LineRange other && Equals(other);
34
35 public override int GetHashCode() => HashCode.Combine(Start, End);
36
37 public static bool operator ==(LineRange left, LineRange right) => left.Equals(right);
38
39 public static bool operator !=(LineRange left, LineRange right) => !left.Equals(right);
40}
41
View only · write via MCP/CIDE