Range 結構的定義在 .NET core preview 3 - 010184 做了改變。
開發環境 Visual Studio 2019 Preview 4 (16.0.0 Preview 4)
框架 .NET Core 3.0.100-preview3-010431
編譯器 C# 8.0 beta
今天很開心的更新了 .NET Core 到 preview 3 10431 ( 之前曾經不小心下載過 10272,後來那個下載點就變成 10184,猜想應該是我下載的當兒微軟放錯版本導致),發現 Range structure 的內容被改變了,在此紀錄一下其變化內容。
以前在 preview 版本時代, Range structure 是長這樣的:
namespace System
{
public struct Range : IEquatable<Range>
{
public Index End { get; }
public Index Start { get; }
public static Range All();
public static Range Create(Index start, Index end);
public static Range FromStart(Index start);
public static Range ToEnd(Index end);
public override bool Equals(object value);
public bool Equals(Range other);
public override int GetHashCode();
public override string ToString();
}
}
在 preview 3 後,改變成以下的形式:
public struct Range : IEquatable<Range>
{
public Range(Index start, Index end);
public static Range All { get; }
public Index End { get; }
public Index Start { get; }
public static Range EndAt(Index end);
public static Range StartAt(Index start);
public override bool Equals(object value);
public bool Equals(Range other);
public override int GetHashCode();
public OffsetAndLength GetOffsetAndLength(int length);
public override string ToString();
public struct OffsetAndLength
{
public OffsetAndLength(int offset, int length);
public int Offset { get; }
public int Length { get; }
public void Deconstruct(out int offset, out int length);
}
}
幾個重要的改變說明如下:
(1) 移除了 static Range Create(Index start, Index end) method,將 Range 的建構函式的存取修飾改為 public。
(2) 原有的 static All() method,改為 static All { get; } property
(3) 原有的 static Range FromStart(Index start) method 更名為 static Range StartAt(Index start) method
(4) 原有的 static Range ToEnd(Index end); method 更名為 static Range EndAt(Index end) method
(5) 以巢狀型別方式在內部新增 OffsetAndLength structure
(6) 新增 public OffsetAndLength GetOffsetAndLength(int length) method
註:依據Consider removing Range.OffsetAndLength目前的討論內容 (5) 和 (6) 可能還會再改。