IndexRange 1.0.3

dotnet add package IndexRange --version 1.0.3
NuGet\Install-Package IndexRange -Version 1.0.3
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="IndexRange" Version="1.0.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add IndexRange --version 1.0.3
#r "nuget: IndexRange, 1.0.3"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install IndexRange as a Cake Addin
#addin nuget:?package=IndexRange&version=1.0.3

// Install IndexRange as a Cake Tool
#tool nuget:?package=IndexRange&version=1.0.3

This package lets you use the C# 8.0 index and range features in projects that target .NET Framework or netstandard2.0.

Using Range with Arrays

The C# compiler needs the RuntimeHelpers.GetSubArray<T> method to be available to create subranges from arrays. This method is only available in netstandard2.1 and .NET Core 3.0, so creating subranges from arrays will fail to compile in .NET Framework.

Use Span<T>

A workaround is to add a reference to System.Memory and use Span<T>. Not only does this compile, it's much more efficient as it doesn't create a new array and copy the sliced data to it:

int[] array = new[] { 1, 2, 3, 4, 5, 6 };

// don't do this:
// var slice = array[1..^1];

// do this:
var slice = array.AsSpan()[1..^1];

Define GetSubArray<T>

The other fix is to define the necessary method in your source code. Copy the following code into your project:

https://gist.github.com/bgrainger/fb2c18659c2cdfce494c82a8c4803360

That type is not in this NuGet package so that the C# compiler doesn't warn that The predefined type 'RuntimeHelpers' is defined in multiple assemblies.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net35 is compatible.  net40 was computed.  net403 was computed.  net45 is compatible.  net451 was computed.  net452 was computed.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 is compatible.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Universal Windows Platform uap10.0.10240 is compatible. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (109)

Showing the top 5 NuGet packages that depend on IndexRange:

Package Downloads
Semver

A SemVer implementation in .Net based on v2.0.0 of the spec found at http://semver.org

EventStore.Client

The legacy TCP client API for Event Store. Get the open source or commercial versions of Event Store server from https://eventstore.com/

Stl

Stl ("ServiceTitan Library") is a collection of relatively small abstractions or methods we couldn't find in BCL. A part of Stl.Fusion.

PhotoSauce.MagicScaler The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

High-Performance image processing pipeline for .NET. Implements best-of-breed algorithms, linear light processing, and sharpening for the best image resizing quality available. Speed, efficiency, and image quality are unmatched by anything else on the .NET platform.

Stl.Net

Stl.Net - a set of helpers related to networking.

GitHub repositories (26)

Showing the top 5 popular GitHub repositories that depend on IndexRange:

Repository Stars
reactiveui/Akavache
An asynchronous, persistent key-value store created for writing desktop and mobile applications, based on SQLite3. Akavache is great for both storing important data as well as cached local data that expires.
shouldly/shouldly
Should testing for .NET—the way assertions should be!
servicetitan/Stl.Fusion
Build real-time apps (Blazor included) with less than 1% of extra code responsible for real-time updates. Host 10-1000x faster APIs relying on transparent and nearly 100% consistent caching. We call it DREAM, or Distributed REActive Memoization, and it's here to turn real-time on!
SubnauticaNitrox/Nitrox
An open-source, multiplayer modification for the game Subnautica.
SamboyCoding/Cpp2IL
Work-in-progress tool to reverse unity's IL2CPP toolchain.
Version Downloads Last updated
1.0.3 144,070 8/22/2023
1.0.2 476,787 4/14/2022
1.0.1 70,548 3/5/2022
1.0.0 672,278 10/4/2019

* Support uap10.0 target framework.
* Use optimized Index.GetOffset in Range.GetOffsetAndLength.