IndexRange 1.0.1-beta.1

This is a prerelease version of IndexRange.
Install-Package IndexRange -Version 1.0.1-beta.1
dotnet add package IndexRange --version 1.0.1-beta.1
<PackageReference Include="IndexRange" Version="1.0.1-beta.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add IndexRange --version 1.0.1-beta.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: IndexRange, 1.0.1-beta.1"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. 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.1-beta.1&prerelease

// Install IndexRange as a Cake Tool
#tool nuget:?package=IndexRange&version=1.0.1-beta.1&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

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.

  • .NETFramework 3.5

  • .NETFramework 4.5

  • .NETFramework 4.7

    • No dependencies.
  • .NETStandard 2.0

    • No dependencies.
  • .NETStandard 2.1

    • No dependencies.

NuGet packages (34)

Showing the top 5 NuGet packages that depend on IndexRange:

Package Downloads
EventStore.Client

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

EventStore.Client.Grpc.Streams

The GRPC client API for Event Store Streams. 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.

EventStore.Client.Grpc.PersistentSubscriptions

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

Stl.Testing

Stl.Testing is a collection of testing helpers used by Stl.Fusion tests.

GitHub repositories (7)

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

Repository Stars
kwsch/PKHeX
Pokémon Save File Editor
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!
VerifyTests/Verify
Verify is a snapshot tool that simplifies the assertion of complex data models and documents.
atifaziz/LinqPadless
LINQPad Queries without LINQPad
SamboyCoding/Cpp2IL
Work-in-progress tool to reverse unity's IL2CPP toolchain.
Version Downloads Last updated
1.0.1-beta.1 334 8/18/2021
1.0.0 101,814 10/4/2019

* Add support for .NET Framework 3.5.
* Produce a deterministic build.
* Embed symbols in the NuGet package.