Source only package that exposes newer .NET and C# features to older runtimes.
The package targets netstandard2.0 and is designed to support the following runtimes.
net461, net462, net47, net471, net472, net48, net481netcoreapp2.0, netcoreapp2.1, netcoreapp3.0, netcoreapp3.1net5.0, net6.0, net7.0, net8.0, net9.0, net10.0, net11.0uap10API count: 1031
| Target | APIs |
|---|---|
net461 | 972 |
net462 | 972 |
net47 | 971 |
net471 | 970 |
net472 | 966 |
net48 | 966 |
net481 | 966 |
netstandard2.0 | 968 |
netstandard2.1 | 821 |
netcoreapp2.0 | 891 |
netcoreapp2.1 | 832 |
netcoreapp2.2 | 832 |
netcoreapp3.0 | 779 |
netcoreapp3.1 | 778 |
net5.0 | 650 |
net6.0 | 555 |
net7.0 | 402 |
net8.0 | 283 |
net9.0 | 189 |
net10.0 | 135 |
net11.0 | 58 |
uap10.0 | 958 |
See Milestones for release notes.
It is recommended that projects that consume Polyfill multi-target all TFMs that the project is expected to be consumed in. See Polyfill and TargetFrameworks
This project uses features from the newest stable SDK and C# language. As such consuming projects should target those:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<LangVersion>latest</LangVersion>
{
"sdk": {
"version": "10.0.300",
"rollForward": "latestFeature"
}
}
| Empty Assembly | With Polyfill | Diff | Ensure | ArgumentExceptions | StringInterpolation | Nullability | |
|---|---|---|---|---|---|---|---|
| netstandard2.0 | 8.0KB | 358.5KB | +350.5KB | +7.5KB | +6.5KB | +7.5KB | +12.0KB |
| netstandard2.1 | 8.5KB | 312.5KB | +304.0KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net461 | 8.5KB | 357.0KB | +348.5KB | +7.5KB | +6.5KB | +8.0KB | +12.5KB |
| net462 | 7.0KB | 360.5KB | +353.5KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net47 | 7.0KB | 360.5KB | +353.5KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net471 | 8.5KB | 359.5KB | +351.0KB | +7.5KB | +6.5KB | +7.5KB | +12.0KB |
| net472 | 8.5KB | 358.0KB | +349.5KB | +8.0KB | +6.5KB | +8.0KB | +12.5KB |
| net48 | 8.5KB | 358.0KB | +349.5KB | +8.0KB | +6.5KB | +8.0KB | +12.5KB |
| net481 | 8.5KB | 358.0KB | +349.5KB | +8.0KB | +6.5KB | +8.0KB | +12.5KB |
| netcoreapp2.0 | 9.0KB | 336.0KB | +327.0KB | +8.5KB | +6.5KB | +9.0KB | +13.5KB |
| netcoreapp2.1 | 9.0KB | 316.0KB | +307.0KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| netcoreapp2.2 | 9.0KB | 316.0KB | +307.0KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| netcoreapp3.0 | 9.5KB | 308.5KB | +299.0KB | +9.0KB | +6.5KB | +9.0KB | +14.0KB |
| netcoreapp3.1 | 9.5KB | 307.0KB | +297.5KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net5.0 | 9.5KB | 271.0KB | +261.5KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net6.0 | 10.0KB | 212.5KB | +202.5KB | +10.0KB | +7.0KB | +512bytes | +3.5KB |
| net7.0 | 10.0KB | 175.0KB | +165.0KB | +11.5KB | +8.0KB | +512bytes | +3.0KB |
| net8.0 | 9.5KB | 145.5KB | +136.0KB | +8.5KB | +512bytes | +3.0KB | |
| net9.0 | 9.5KB | 98.5KB | +89.0KB | +8.5KB | +512bytes | +3.5KB | |
| net10.0 | 10.0KB | 76.0KB | +66.0KB | +8.5KB | +512bytes | +3.5KB | |
| net11.0 | 10.0KB | 20.5KB | +10.5KB | +9.0KB | +512bytes | +3.5KB |
| Empty Assembly | With Polyfill | Diff | Ensure | ArgumentExceptions | StringInterpolation | Nullability | |
|---|---|---|---|---|---|---|---|
| netstandard2.0 | 8.0KB | 524.4KB | +516.4KB | +15.2KB | +8.2KB | +12.4KB | +17.4KB |
| netstandard2.1 | 8.5KB | 451.8KB | +443.3KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net461 | 8.5KB | 524.0KB | +515.5KB | +15.2KB | +8.2KB | +12.9KB | +17.9KB |
| net462 | 7.0KB | 527.5KB | +520.5KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net47 | 7.0KB | 527.2KB | +520.2KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net471 | 8.5KB | 525.8KB | +517.3KB | +15.2KB | +8.2KB | +12.4KB | +17.4KB |
| net472 | 8.5KB | 523.3KB | +514.8KB | +15.7KB | +8.2KB | +12.9KB | +17.9KB |
| net48 | 8.5KB | 523.3KB | +514.8KB | +15.7KB | +8.2KB | +12.9KB | +17.9KB |
| net481 | 8.5KB | 523.3KB | +514.8KB | +15.7KB | +8.2KB | +12.9KB | +17.9KB |
| netcoreapp2.0 | 9.0KB | 491.3KB | +482.3KB | +16.2KB | +8.2KB | +13.9KB | +18.9KB |
| netcoreapp2.1 | 9.0KB | 459.0KB | +450.0KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| netcoreapp2.2 | 9.0KB | 459.0KB | +450.0KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| netcoreapp3.0 | 9.5KB | 442.7KB | +433.2KB | +16.7KB | +8.2KB | +13.9KB | +19.4KB |
| netcoreapp3.1 | 9.5KB | 441.2KB | +431.7KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net5.0 | 9.5KB | 387.0KB | +377.5KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net6.0 | 10.0KB | 308.4KB | +298.4KB | +17.7KB | +8.7KB | +1.1KB | +4.2KB |
| net7.0 | 10.0KB | 252.3KB | +242.3KB | +19.1KB | +9.4KB | +1.1KB | +3.7KB |
| net8.0 | 9.5KB | 207.3KB | +197.8KB | +16.0KB | +299bytes | +1.1KB | +3.7KB |
| net9.0 | 9.5KB | 139.1KB | +129.6KB | +16.0KB | +1.1KB | +4.2KB | |
| net10.0 | 10.0KB | 108.0KB | +98.0KB | +16.0KB | +1.1KB | +4.2KB | |
| net11.0 | 10.0KB | 30.3KB | +20.3KB | +16.5KB | +1.1KB | +4.2KB |
To consume Polyfill as a library (instead of a source-only package) see PolyfillLib
Make sure DefineConstants is not set from dotnet CLI, which would override important constants set by Polyfill.
Instead of using dotnet publish -p:DefineConstants=MY_CONSTANT, set the constant indirectly in the project:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants Condition="'$(MyConstant)' == 'true'">$(DefineConstants);MY_CONSTANT</DefineConstants>
and use dotnet publish -p:MyConstant=true.
Reference: Module Initializers
static bool InitCalled;
[Test]
public async Task ModuleInitTest() =>
await Assert.That(InitCalled).IsTrue();
[ModuleInitializer]
public static void ModuleInit() =>
InitCalled = true;
Reference: init (C# Reference)
class InitSample
{
public int Member { get; init; }
}
Reference: Nullable reference types
Reference: C# required modifier
public class Person
{
public Person()
{
}
[SetsRequiredMembers]
public Person(string name) =>
Name = name;
public required string Name { get; init; }
}
Indicates that compiler support for a particular feature is required for the location where this attribute is applied.
Can be used to make types compatible with collection expressions
Indicates that the specified method parameter expects a constant.
Reference: SkipLocalsInitAttribute
the SkipLocalsInit attribute prevents the compiler from setting the .locals init flag when emitting to metadata. The SkipLocalsInit attribute is a single-use attribute and can be applied to a method, a property, a class, a struct, an interface, or a module, but not to an assembly. SkipLocalsInit is an alias for SkipLocalsInitAttribute.
class SkipLocalsInitSample
{
[SkipLocalsInit]
static void ReadUninitializedMemory()
{
Span<int> numbers = stackalloc int[120];
for (var i = 0; i < 120; i++)
{
Console.WriteLine(numbers[i]);
}
}
}
Reference: Indices and ranges
If consuming in a project that targets net461 or net462, a reference to System.ValueTuple is required. See References: System.ValueTuple.
class IndexRangeSample
{
[Test]
public async Task Range()
{
var substring = "value"[2..];
await Assert.That(substring).IsEqualTo("lue");
}
[Test]
public async Task Index()
{
var ch = "value"[^2];
await Assert.That(ch).IsEqualTo('u');
}
[Test]
public async Task ArrayIndex()
{
var array = new[]
{
"value1",
"value2"
};
var value = array[^2];
await Assert.That(value).IsEqualTo("value1");
}
}
C# introduces a new attribute, System.Runtime.CompilerServices.OverloadResolutionPriority, that can be used by API authors to adjust the relative priority of overloads within a single type as a means of steering API consumers to use specific APIs, even if those APIs would normally be considered ambiguous or otherwise not be chosen by C#'s overload resolution rules. This helps framework and library authors guide API usage as they APIs as they develop new and better patterns.
The OverloadResolutionPriorityAttribute can be used in conjunction with the ObsoleteAttribute. A library author may mark properties, methods, types and other programming elements as obsolete, while leaving them in place for backwards compatibility. Using programming elements marked with the ObsoleteAttribute will result in compiler warnings or errors. However, the type or member is still visible to overload resolution and may be selected over a better overload or cause an ambiguity failure. The OverloadResolutionPriorityAttribute lets library authors fix these problems by lowering the priority of obsolete members when there are better alternatives.
public class OverloadResolutionPriorityAttributeTests
{
[Test]
public Task Run()
{
int[] arr = [1, 2, 3];
//Prints "Span" because resolution priority is higher
Method(arr);
return Task.CompletedTask;
}
[OverloadResolutionPriority(2)]
static void Method(ReadOnlySpan<int> list) =>
Console.WriteLine("Span");
[OverloadResolutionPriority(1)]
static void Method(int[] list) =>
Console.WriteLine("Array");
}
Reference: Low Level Struct Improvements
struct UnscopedRefUsage
{
int field1;
[UnscopedRef] ref int Prop1 => ref field1;
}
Reference: CallerArgumentExpression
static class FileUtil
{
public static void FileExists(string path, [CallerArgumentExpression("path")] string name = "")
{
if (!File.Exists(path))
{
throw new ArgumentException($"File not found. Path: {path}", name);
}
}
}
static class FileUtilUsage
{
public static string[] Method(string path)
{
FileUtil.FileExists(path);
return File.ReadAllLines(path);
}
}
Enable by adding an MSBuild property PolyStringInterpolation
<PropertyGroup>
...
<PolyStringInterpolation>true</PolyStringInterpolation>
</PropertyGroup>
References: String Interpolation in C# 10 and .NET 6, Write a custom string interpolation handler
[!IMPORTANT] In the below extension method list, the methods using
AppendInterpolatedStringHandlerparameter are not extensions because the compiler prefers to use the overload withstringparameter instead.
Reference: .NET 7 - The StringSyntaxAttribute
Reference: Prepare .NET libraries for trimming
Reference: Platform compatibility analyzer
Reference: C# – Hide a method from the stack trace
Reference: Improvements in native code interop in .NET 5.0
The class Polyfill includes the following extension methods:
Requires
<PolyArgumentExceptions>true</PolyArgumentExceptions>in the consuming project.
Requires
<PolyArgumentExceptions>true</PolyArgumentExceptions>in the consuming project.
Requires
<PolyArgumentExceptions>true</PolyArgumentExceptions>in the consuming project.
void ThrowIfEqual<T>(T, T) where T : IEquatable<T>? referencevoid ThrowIfGreaterThan(nint, nint)void ThrowIfGreaterThan<T>(T, T) where T : IComparable<T> referencevoid ThrowIfGreaterThanOrEqual(nint, nint)void ThrowIfGreaterThanOrEqual<T>(T, T) where T : IComparable<T> referencevoid ThrowIfLessThan(nint, nint)void ThrowIfLessThan<T>(T, T) where T : IComparable<T> referencevoid ThrowIfLessThanOrEqual(nint, nint)void ThrowIfLessThanOrEqual<T>(T, T) where T : IComparable<T> referencevoid ThrowIfNegative(nint) referencevoid ThrowIfNegative<T>(T) where T : struct, IComparable<T> referencevoid ThrowIfNegativeOrZero(nint)void ThrowIfNegativeOrZero<T>(T) where T : struct, IComparable<T> referencevoid ThrowIfNotEqual<T>(T, T) where T : IEquatable<T>? referencevoid ThrowIfZero(nint)void ThrowIfZero<T>(T) where T : struct, IEquatable<T> referencevoid CopyTo<T>(ArraySegment<T>) referencevoid CopyTo<T>(T[], int) referencevoid CopyTo<T>(T[]) referenceArraySegmentEnumerator<T> GetEnumerator<T>() referenceOperationStatus DecodeFromChars(ReadOnlySpan<char>, Span<byte>, int, int, bool) referenceint DecodeFromChars(ReadOnlySpan<char>, Span<byte>) referencebyte[] DecodeFromChars(ReadOnlySpan<char>) referencebyte[] DecodeFromUtf8(ReadOnlySpan<byte>) referenceOperationStatus EncodeToChars(ReadOnlySpan<byte>, Span<char>, int, int, bool) referenceint EncodeToChars(ReadOnlySpan<byte>, Span<char>) referencechar[] EncodeToChars(ReadOnlySpan<byte>) referencestring EncodeToString(ReadOnlySpan<byte>) referencebyte[] EncodeToUtf8(ReadOnlySpan<byte>) referenceint GetEncodedLength(int) referenceint GetMaxDecodedLength(int) referencebool TryDecodeFromChars(ReadOnlySpan<char>, Span<byte>, int) referencebool TryEncodeToChars(ReadOnlySpan<byte>, Span<char>, int) referencedouble ReadDoubleBigEndian(ReadOnlySpan<byte>) referencedouble ReadDoubleLittleEndian(ReadOnlySpan<byte>) referencefloat ReadSingleBigEndian(ReadOnlySpan<byte>) referencefloat ReadSingleLittleEndian(ReadOnlySpan<byte>) referencebool TryReadDoubleBigEndian(ReadOnlySpan<byte>, double) referencebool TryReadDoubleLittleEndian(ReadOnlySpan<byte>, double) referencebool TryReadSingleBigEndian(ReadOnlySpan<byte>, float) referencebool TryReadSingleLittleEndian(ReadOnlySpan<byte>, float) referencebool TryWriteDoubleBigEndian(Span<byte>, double) referencebool TryWriteDoubleLittleEndian(Span<byte>, double) referencebool TryWriteSingleBigEndian(Span<byte>, float) referencebool TryWriteSingleLittleEndian(Span<byte>, float) referencevoid WriteDoubleBigEndian(Span<byte>, double) referencevoid WriteDoubleLittleEndian(Span<byte>, double) referencevoid WriteSingleBigEndian(Span<byte>, float) referencevoid WriteSingleLittleEndian(Span<byte>, float) referencebool TryFormat(Span<char>, int) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, byte) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, byte) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, byte) referencebool TryParse(ReadOnlySpan<char>, byte) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, byte) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, byte) referencebool TryParse(string?, IFormatProvider?, byte) referenceCancellationTokenRegistration Register(Action<object?, CancellationToken>, object?) referenceCancellationTokenRegistration UnsafeRegister(Action<object?, CancellationToken>, object?) referenceCancellationTokenRegistration UnsafeRegister(Action<object?>, object?) referenceTask CancelAsync() referenceValueSpan referencebool Equals(char, StringComparison) referencebool IsAscii(char) referencebool IsAsciiDigit(char) referencebool IsAsciiHexDigit(char) referencebool IsAsciiHexDigitLower(char) referencebool IsAsciiHexDigitUpper(char) referencebool IsAsciiLetter(char) referencebool IsAsciiLetterLower(char) referencebool IsAsciiLetterOrDigit(char) referencebool IsAsciiLetterUpper(char) referencebool IsBetween(char, char, char) referencevoid Clear<T>() referenceTValue GetOrAdd<TKey, TValue, TArg>(TKey, Func<TKey, TArg, TValue>, TArg) where TKey : notnull referencevoid Clear<T>() referencebool Remove<TKey, TValue>(TKey, TValue) where TKey : class where TValue : class reference
SafeFileHandle OpenStandardErrorHandle() referenceSafeFileHandle OpenStandardInputHandle() referenceSafeFileHandle OpenStandardOutputHandle() referenceOperationStatus FromHexString(ReadOnlySpan<byte>, Span<byte>, int, int) referencebyte[] FromHexString(ReadOnlySpan<byte>) referenceOperationStatus FromHexString(ReadOnlySpan<char>, Span<byte>, int, int) referencebyte[] FromHexString(ReadOnlySpan<char>) referenceOperationStatus FromHexString(string, Span<byte>, int, int) referencebyte[] FromHexString(string) referencestring ToHexString(byte[], int, int) referencestring ToHexString(byte[]) referencestring ToHexString(ReadOnlySpan<byte>) referencestring ToHexStringLower(byte[], int, int) referencestring ToHexStringLower(byte[]) referencestring ToHexStringLower(ReadOnlySpan<byte>) referencebool TryFromBase64Chars(ReadOnlySpan<char>, Span<byte>, int) referencebool TryFromBase64String(string, Span<byte>, int) referencebool TryToBase64Chars(ReadOnlySpan<byte>, Span<char>, int, Base64FormattingOptions) referencebool TryToHexString(ReadOnlySpan<byte>, Span<byte>, int) referencebool TryToHexString(ReadOnlySpan<byte>, Span<char>, int) referencebool TryToHexStringLower(ReadOnlySpan<byte>, Span<byte>, int) referencebool TryToHexStringLower(ReadOnlySpan<byte>, Span<char>, int) referencevoid Deconstruct(int, int, int) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referenceDateTime AddMicroseconds(double) referencevoid Deconstruct(DateOnly, TimeOnly) referencevoid Deconstruct(int, int, int) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<char>, DateTime) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, DateTime) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, DateTimeStyles, DateTime) referencebool TryParse(string?, IFormatProvider?, DateTime) referencebool TryParseExact(ReadOnlySpan<char>, ReadOnlySpan<char>, IFormatProvider?, DateTimeStyles, DateTime) referencebool TryParseExact(ReadOnlySpan<char>, string, IFormatProvider?, DateTimeStyles, DateTime) referenceMicrosecond referenceNanosecond referenceDateTimeOffset AddMicroseconds(double) referencevoid Deconstruct(DateOnly, TimeOnly, TimeSpan) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<char>, DateTimeOffset) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, DateTimeOffset) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, DateTimeStyles, DateTimeOffset) referencebool TryParse(string?, IFormatProvider?, DateTimeOffset) referencebool TryParseExact(ReadOnlySpan<char>, ReadOnlySpan<char>, IFormatProvider?, DateTimeStyles, DateTimeOffset) referencebool TryParseExact(ReadOnlySpan<char>, string, IFormatProvider?, DateTimeStyles, DateTimeOffset) referenceMicrosecond referenceNanosecond referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, decimal) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, decimal) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, decimal) referencebool TryParse(ReadOnlySpan<char>, decimal) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, decimal) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, decimal) referencebool TryParse(string?, IFormatProvider?, decimal) referencevoid Clear() referenceInvocationListEnumerator<TDelegate> EnumerateInvocationList<TDelegate>(TDelegate?) where TDelegate : Delegate referenceHasSingleTarget referencevoid EnsureCapacity<TKey, TValue>(int) reference
DictionaryAlternateLookup<TKey, TValue, TAlternateKey> GetAlternateLookup<TKey, TValue, TAlternateKey>() where TKey : notnull reference
DictionaryAlternateLookup<TKey, TValue, TAlternateKey> rather than the BCL's nested Dictionary<TKey, TValue>.AlternateLookup<TAlternateKey>. Use var for cross-target code.void TrimExcess<TKey, TValue>(int) reference
void TrimExcess<TKey, TValue>() reference
bool TryGetAlternateLookup<TKey, TValue, TAlternateKey>(DictionaryAlternateLookup<TKey, TValue, TAlternateKey>) where TKey : notnull reference
void Deconstruct(object, object?) referenceDirectoryInfo CreateTempSubdirectory(string?) referenceIEnumerable<string> EnumerateDirectories(string, string, EnumerationOptions) referenceIEnumerable<string> EnumerateFiles(string, string, EnumerationOptions) referenceIEnumerable<string> EnumerateFileSystemEntries(string, string, EnumerationOptions) referencestring[] GetDirectories(string, string, EnumerationOptions) referencestring[] GetFiles(string, string, EnumerationOptions) referencestring[] GetFileSystemEntries(string, string, EnumerationOptions) referenceIEnumerable<DirectoryInfo> EnumerateDirectories(string, EnumerationOptions) referenceIEnumerable<FileInfo> EnumerateFiles(string, EnumerationOptions) referenceIEnumerable<FileSystemInfo> EnumerateFileSystemInfos(string, EnumerationOptions) referenceDirectoryInfo[] GetDirectories(string, EnumerationOptions) referenceFileInfo[] GetFiles(string, EnumerationOptions) referenceFileSystemInfo[] GetFileSystemInfos(string, EnumerationOptions) referenceulong DoubleToUInt64Bits(double)bool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, double) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, double) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, double) referencebool TryParse(ReadOnlySpan<char>, double) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, double) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, double) referencebool TryParse(string?, IFormatProvider?, double) referencevoid Convert(ReadOnlySpan<char>, Span<byte>, bool, int, int, bool) referenceint GetByteCount(ReadOnlySpan<char>) referenceint GetBytes(ReadOnlySpan<char>, Span<byte>) referenceint GetCharCount(ReadOnlySpan<byte>) referenceint GetChars(ReadOnlySpan<byte>, Span<char>) referencestring GetString(ReadOnlySpan<byte>) referencebool TryGetBytes(ReadOnlySpan<char>, Span<byte>, int) referencebool TryGetChars(ReadOnlySpan<byte>, Span<char>, int) referenceLatin1 referencePreamble reference
string[] GetNames<TEnum>() where TEnum : struct, Enum referenceTEnum[] GetValues<TEnum>() where TEnum : struct, Enum referenceArray GetValuesAsUnderlyingType(Type) referenceArray GetValuesAsUnderlyingType<TEnum>() where TEnum : struct, Enum referencebool IsDefined<TEnum>(TEnum) where TEnum : struct, Enum referenceTEnum Parse<TEnum>(ReadOnlySpan<char>, bool) where TEnum : struct, Enum referenceTEnum Parse<TEnum>(ReadOnlySpan<char>) where TEnum : struct, Enum referenceTEnum Parse<TEnum>(string, bool) where TEnum : struct, Enum referenceTEnum Parse<TEnum>(string) where TEnum : struct, Enum referencebool TryFormat<TEnum>(TEnum, Span<char>, int, ReadOnlySpan<char>) where TEnum : struct, Enum referencebool TryParse<TEnum>(ReadOnlySpan<char>, bool, TEnum) where TEnum : struct, Enum referencebool TryParse<TEnum>(ReadOnlySpan<char>, TEnum) where TEnum : struct, Enum referenceIEnumerable<T> InfiniteSequence<T>(T, T) where T : IAdditionOperators<T, T, T> referenceIEnumerable<T> Sequence<T>(T, T, T) where T : INumber<T> referenceEqualityComparer<T> Create(Func<T?, T?, bool>, Func<T, int>?) referenceEqualityComparer<T> Create<TKey>(Func<T?, TKey?>, IEqualityComparer<TKey>?) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool IsNullable()Exception SetCurrentStackTrace(Exception) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool IsNullable()void AppendAllBytes(string, byte[]) referencevoid AppendAllBytes(string, ReadOnlySpan<byte>) referenceTask AppendAllBytesAsync(string, byte[], CancellationToken) referenceTask AppendAllBytesAsync(string, ReadOnlyMemory<byte>, CancellationToken) referenceTask AppendAllLinesAsync(string, IEnumerable<string>, CancellationToken) referenceTask AppendAllLinesAsync(string, IEnumerable<string>, Encoding, CancellationToken) referencevoid AppendAllText(string, ReadOnlySpan<char>, Encoding) referencevoid AppendAllText(string, ReadOnlySpan<char>) referenceTask AppendAllTextAsync(string, ReadOnlyMemory<char>, CancellationToken) referenceTask AppendAllTextAsync(string, ReadOnlyMemory<char>, Encoding, CancellationToken) referenceTask AppendAllTextAsync(string, string?, CancellationToken) referenceTask AppendAllTextAsync(string, string?, Encoding, CancellationToken) referenceFileSystemInfo CreateHardLink(string, string) referencevoid Move(string, string, bool) referenceSafeFileHandle OpenNullHandle() referenceTask<byte[]> ReadAllBytesAsync(string, CancellationToken) referenceTask<string[]> ReadAllLinesAsync(string, CancellationToken) referenceTask<string[]> ReadAllLinesAsync(string, Encoding, CancellationToken) referenceTask<string> ReadAllTextAsync(string, CancellationToken) referenceTask<string> ReadAllTextAsync(string, Encoding, CancellationToken) referenceIAsyncEnumerable<string> ReadLinesAsync(string, CancellationToken) referenceIAsyncEnumerable<string> ReadLinesAsync(string, Encoding, CancellationToken) referenceTask WriteAllBytesAsync(string, byte[], CancellationToken) referenceTask WriteAllBytesAsync(string, ReadOnlyMemory<byte>, CancellationToken) referenceTask WriteAllLinesAsync(string, IEnumerable<string>, CancellationToken) referenceTask WriteAllLinesAsync(string, IEnumerable<string>, Encoding, CancellationToken) referencevoid WriteAllText(string, ReadOnlySpan<char>, Encoding) referencevoid WriteAllText(string, ReadOnlySpan<char>) referenceTask WriteAllTextAsync(string, string?, CancellationToken) referenceTask WriteAllTextAsync(string, string?, Encoding, CancellationToken) referencevoid CreateAsHardLink(string) referenceT[] AllocateUninitializedArray<T>(int, bool) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>) referenceGuid CreateVersion7() referenceGuid CreateVersion7(DateTimeOffset) referenceGuid Parse(ReadOnlySpan<byte>) referencebool TryParse(ReadOnlySpan<byte>, Guid) referencebool TryParse(ReadOnlySpan<char>, Guid) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, Guid) referencebool TryParse(string?, IFormatProvider?, Guid) referencebool TryParseExact(ReadOnlySpan<char>, ReadOnlySpan<char>, Guid) referenceAllBitsSet referencevoid EnsureCapacity<T>(int) reference
HashSetAlternateLookup<T, TAlternate> GetAlternateLookup<T, TAlternate>() reference
HashSetAlternateLookup<T, TAlternate> rather than the BCL's nested HashSet<T>.AlternateLookup<TAlternate>. Use var for cross-target code.void TrimExcess<T>(int) reference
bool TryGetAlternateLookup<T, TAlternate>(HashSetAlternateLookup<T, TAlternate>) reference
bool TryGetValue<T>(T, T) referenceTask<byte[]> GetByteArrayAsync(string, CancellationToken) referenceTask<byte[]> GetByteArrayAsync(Uri, CancellationToken) referenceTask<Stream> GetStreamAsync(string, CancellationToken) referenceTask<Stream> GetStreamAsync(Uri, CancellationToken) referenceTask<string> GetStringAsync(string, CancellationToken) referenceTask<string> GetStringAsync(Uri, CancellationToken) referenceTask<HttpResponseMessage> PatchAsync(string?, HttpContent?, CancellationToken) referenceTask<HttpResponseMessage> PatchAsync(string?, HttpContent?) referenceTask<HttpResponseMessage> PatchAsync(Uri?, HttpContent?, CancellationToken) referenceTask<HttpResponseMessage> PatchAsync(Uri?, HttpContent?) referenceHttpResponseMessage Send(HttpRequestMessage, CancellationToken) referenceHttpResponseMessage Send(HttpRequestMessage, HttpCompletionOption, CancellationToken) referenceHttpResponseMessage Send(HttpRequestMessage, HttpCompletionOption) referenceHttpResponseMessage Send(HttpRequestMessage) referencevoid CopyTo(Stream, System.Net.TransportContext?, CancellationToken) referenceTask CopyToAsync(Stream, CancellationToken) referenceTask CopyToAsync(Stream, System.Net.TransportContext?, CancellationToken) referenceTask LoadIntoBufferAsync(CancellationToken) referenceTask LoadIntoBufferAsync(long, CancellationToken) referenceTask<byte[]> ReadAsByteArrayAsync(CancellationToken) referenceStream ReadAsStream(CancellationToken) referenceTask<Stream> ReadAsStreamAsync(CancellationToken) referenceTask<string> ReadAsStringAsync(CancellationToken) referenceReadOnlyDictionary<TKey, TValue> AsReadOnly<TKey, TValue>() where TKey : notnull referencebool Remove<TKey, TValue>(TKey, TValue) where TKey : notnull referencebool TryAdd<TKey, TValue>(TKey, TValue) where TKey : notnull referenceDictionary<TKey, TValue> ToDictionary<TKey, TValue>(IEqualityComparer<TKey>?) where TKey : notnull referenceIOrderedEnumerable<T> Order<T>(IComparer<T>?) referenceIOrderedEnumerable<T> Order<T>() referenceIOrderedEnumerable<T> OrderDescending<T>(IComparer<T>?) referenceIOrderedEnumerable<T> OrderDescending<T>() referenceIEnumerable<(TFirst First, TSecond Second, TThird Third)> Zip<TFirst, TSecond, TThird>(IEnumerable<TSecond>, IEnumerable<TThird>) referenceIEnumerable<(TFirst First, TSecond Second)> Zip<TFirst, TSecond>(IEnumerable<TSecond>) referenceIEnumerable<TResult> FullJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter?, TInner?, TResult>, IEqualityComparer<TKey>?) referenceIEnumerable<(TOuter? Outer, TInner? Inner)> FullJoin<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<IGrouping<TOuter, TInner>> GroupJoin<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<(TOuter Outer, TInner Inner)> Join<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TResult> LeftJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner?, TResult>, IEqualityComparer<TKey>?) referenceIEnumerable<TResult> LeftJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner?, TResult>) referenceIEnumerable<(TOuter Outer, TInner? Inner)> LeftJoin<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TResult> RightJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter?, TInner, TResult>, IEqualityComparer<TKey>?) referenceIEnumerable<TResult> RightJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter?, TInner, TResult>) referenceIEnumerable<(TOuter? Outer, TInner Inner)> RightJoin<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<KeyValuePair<TKey, TAccumulate>> AggregateBy<TSource, TKey, TAccumulate>(Func<TSource, TKey>, Func<TKey, TAccumulate>, Func<TAccumulate, TSource, TAccumulate>, IEqualityComparer<TKey>?) where TKey : notnull referenceIEnumerable<KeyValuePair<TKey, TAccumulate>> AggregateBy<TSource, TKey, TAccumulate>(Func<TSource, TKey>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>, IEqualityComparer<TKey>?) where TKey : notnull referenceIEnumerable<TSource> Append<TSource>(TSource) referenceIEnumerable<TSource[]> Chunk<TSource>(int) referenceIEnumerable<KeyValuePair<TKey, int>> CountBy<TSource, TKey>(Func<TSource, TKey>, IEqualityComparer<TKey>?) where TKey : notnull referenceIEnumerable<TSource> DistinctBy<TSource, TKey>(Func<TSource, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TSource> DistinctBy<TSource, TKey>(Func<TSource, TKey>) referenceTSource ElementAt<TSource>(Index) referenceTSource? ElementAtOrDefault<TSource>(Index) referenceIEnumerable<TSource> Except<TSource>(IEqualityComparer<TSource>?, TSource[]) referenceIEnumerable<TSource> Except<TSource>(TSource, IEqualityComparer<TSource>?) referenceIEnumerable<TSource> Except<TSource>(TSource) referenceIEnumerable<TSource> ExceptBy<TSource, TKey>(IEnumerable<TKey>, Func<TSource, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TSource> ExceptBy<TSource, TKey>(IEnumerable<TKey>, Func<TSource, TKey>) referenceTSource FirstOrDefault<TSource>(Func<TSource, bool>, TSource) referenceTSource FirstOrDefault<TSource>(TSource) referenceIEnumerable<(int Index, TSource Item)> Index<TSource>() referenceIEnumerable<TSource> IntersectBy<TSource, TKey>(IEnumerable<TKey>, Func<TSource, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TSource> IntersectBy<TSource, TKey>(IEnumerable<TKey>, Func<TSource, TKey>) referenceTSource LastOrDefault<TSource>(Func<TSource, bool>, TSource) referenceTSource LastOrDefault<TSource>(TSource) referenceTSource? Max<TSource>(IComparer<TSource>?) referenceTSource? MaxBy<TSource, TKey>(Func<TSource, TKey>, IComparer<TKey>?) referenceTSource? MaxBy<TSource, TKey>(Func<TSource, TKey>) referenceTSource? Min<TSource>(IComparer<TSource>?) referenceTSource? MinBy<TSource, TKey>(Func<TSource, TKey>, IComparer<TKey>?) referenceTSource? MinBy<TSource, TKey>(Func<TSource, TKey>) referenceIEnumerable<TSource> Prepend<TSource>(TSource) referenceTSource SingleOrDefault<TSource>(Func<TSource, bool>, TSource) referenceTSource SingleOrDefault<TSource>(TSource) referenceIEnumerable<TSource> SkipLast<TSource>(int) referenceIEnumerable<TSource> Take<TSource>(Range) referenceIEnumerable<TSource> TakeLast<TSource>(int) referenceHashSet<TSource> ToHashSet<TSource>(IEqualityComparer<TSource>?) referencebool TryGetNonEnumeratedCount<TSource>(int) referenceIEnumerable<TSource> UnionBy<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TSource> UnionBy<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>) referenceReadOnlyCollection<T> AsReadOnly<T>() referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, short) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, short) referencebool TryParse(ReadOnlySpan<byte>, short) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, short) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, short) referencebool TryParse(ReadOnlySpan<char>, short) referencebool TryParse(string?, IFormatProvider?, short) referencefloat Int32BitsToSingle(int)bool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, int) referencebool TryParse(ReadOnlySpan<byte>, int) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, int) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, int) referencebool TryParse(ReadOnlySpan<char>, int) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, int) referencebool TryParse(string?, IFormatProvider?, int) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, long) referencebool TryParse(ReadOnlySpan<byte>, long) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, long) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, long) referencebool TryParse(ReadOnlySpan<char>, long) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, long) referencebool TryParse(string?, IFormatProvider?, long) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, nint) referencebool TryParse(ReadOnlySpan<byte>, nint) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, nint) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, nint) referencebool TryParse(ReadOnlySpan<char>, nint) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, nint) referencebool TryParse(string?, IFormatProvider?, nint) referencebool TryParse(string?, nint) referencebool TryParse(string?, NumberStyles, IFormatProvider?, nint) referenceIPAddress Parse(ReadOnlySpan<char>) referencebool TryParse(ReadOnlySpan<byte>, IPAddress?) referencebool TryParse(ReadOnlySpan<char>, IPAddress?) referenceTValue GetValueOrDefault<TKey, TValue>(TKey, TValue) where TKey : notnull referenceTValue? GetValueOrDefault<TKey, TValue>(TKey) referenceReadOnlySet<T> AsReadOnly<T>() referencevoid Deconstruct<TKey, TValue>(TKey, TValue) referencevoid AddRange<T>(ReadOnlySpan<T>) referencevoid CopyTo<T>(Span<T>) referencevoid EnsureCapacity<T>(int) reference
void InsertRange<T>(int, ReadOnlySpan<T>) referencevoid TrimExcess<T>()
byte Clamp(byte, byte, byte) referencedecimal Clamp(decimal, decimal, decimal) referencedouble Clamp(double, double, double) referencefloat Clamp(float, float, float) referenceint Clamp(int, int, int) referencelong Clamp(long, long, long) referencenint Clamp(nint, nint, nint) referencenuint Clamp(nuint, nuint, nuint) referencesbyte Clamp(sbyte, sbyte, sbyte) referenceshort Clamp(short, short, short) referenceuint Clamp(uint, uint, uint) referenceulong Clamp(ulong, ulong, ulong) referenceushort Clamp(ushort, ushort, ushort) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool HasSameMetadataDefinitionAs(MemberInfo) referencebool IsNullable()T CreateDelegate<T>(object?) where T : Delegate referenceT CreateDelegate<T>() where T : Delegate referenceRequires
<PolyArgumentExceptions>true</PolyArgumentExceptions>in the consuming project.
bool IsAndroid() referencebool IsAndroidVersionAtLeast(int, int, int, int) referencebool IsBrowser() referencebool IsFreeBSD() referencebool IsFreeBSDVersionAtLeast(int, int, int, int) referencebool IsIOS() referencebool IsIOSVersionAtLeast(int, int, int) referencebool IsLinux() referencebool IsMacCatalyst() referencebool IsMacCatalystVersionAtLeast(int, int, int) referencebool IsMacOS() referencebool IsMacOSVersionAtLeast(int, int, int) referencebool IsOSPlatform(string) referencebool IsOSPlatformVersionAtLeast(string, int, int, int, int) referencebool IsTvOS() referencebool IsTvOSVersionAtLeast(int, int, int) referencebool IsWasi() referencebool IsWatchOS() referencebool IsWatchOSVersionAtLeast(int, int, int) referencebool IsWindows() referencebool IsWindowsVersionAtLeast(int, int, int, int) referencebool TryAdd<TKey, TValue>(TKey, TValue, int) where TKey : notnull referencebool TryGetValue<TKey, TValue>(TKey, TValue, int) where TKey : notnull referenceTask ForEachAsync<T>(IAsyncEnumerable<T>, CancellationToken, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IAsyncEnumerable<T>, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IAsyncEnumerable<T>, ParallelOptions, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IEnumerable<T>, CancellationToken, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IEnumerable<T>, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IEnumerable<T>, ParallelOptions, Func<T, CancellationToken, ValueTask>) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool IsNullable()string Combine(ReadOnlySpan<string>) referencebool EndsInDirectorySeparator(ReadOnlySpan<char>) referencebool EndsInDirectorySeparator(string) referencebool Exists(string?) referenceReadOnlySpan<char> GetDirectoryName(ReadOnlySpan<char>) referenceReadOnlySpan<char> GetExtension(ReadOnlySpan<char>) referenceReadOnlySpan<char> GetFileName(ReadOnlySpan<char>) referenceReadOnlySpan<char> GetFileNameWithoutExtension(ReadOnlySpan<char>) referencestring GetRelativePath(string, string) referencebool HasExtension(ReadOnlySpan<char>) referencebool IsPathRooted(ReadOnlySpan<char>) referencestring Join(string?[]) referenceReadOnlySpan<char> TrimEndingDirectorySeparator(ReadOnlySpan<char>) referencestring TrimEndingDirectorySeparator(string) referencebool Remove<TElement, TPriority>(TElement, TElement, TPriority, IEqualityComparer<TElement>?) referencevoid Kill(bool) reference(byte[] StandardOutput, byte[] StandardError) ReadAllBytes(TimeSpan?) referenceTask<(byte[] StandardOutput, byte[] StandardError)> ReadAllBytesAsync(CancellationToken) referenceIAsyncEnumerable<ProcessOutputLine> ReadAllLinesAsync(CancellationToken) reference(string StandardOutput, string StandardError) ReadAllText(TimeSpan?) referenceTask<(string StandardOutput, string StandardError)> ReadAllTextAsync(CancellationToken) referenceTask WaitForExitAsync(CancellationToken) referenceProcessExitStatus Run(ProcessStartInfo, TimeSpan?) referenceProcessExitStatus Run(string, IList<string>?, bool, TimeSpan?) reference
ProcessTextOutput RunAndCaptureText(ProcessStartInfo, TimeSpan?) referenceProcessTextOutput RunAndCaptureText(string, IList<string>?, TimeSpan?) referenceTask<ProcessTextOutput> RunAndCaptureTextAsync(ProcessStartInfo, CancellationToken) referenceTask<ProcessTextOutput> RunAndCaptureTextAsync(string, IList<string>?, CancellationToken) referenceTask<ProcessExitStatus> RunAsync(ProcessStartInfo, CancellationToken) referenceTask<ProcessExitStatus> RunAsync(string, IList<string>?, bool, CancellationToken) reference
int StartAndForget(ProcessStartInfo) referenceint StartAndForget(string, IList<string>?) referencebool TryGetProcessById(int, Process?) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool IsNullable()void EnsureCapacity<T>(int) reference
void TrimExcess<T>(int) reference
bool TryDequeue<T>(T) referencebool TryPeek<T>(T) referencestring GetHexString(int, bool) referencevoid GetHexString(Span<char>, bool) referenceT[] GetItems<T>(ReadOnlySpan<T>, int) referencevoid GetItems<T>(ReadOnlySpan<T>, Span<T>) referenceT[] GetItems<T>(T[], int) referencestring GetString(ReadOnlySpan<char>, int) referencevoid NextBytes(Span<byte>) referencelong NextInt64(long, long) referencelong NextInt64(long) referencelong NextInt64() referencefloat NextSingle() referencevoid Shuffle<T>(Span<T>) referencevoid Shuffle<T>(T[]) referenceShared referencevoid Fill(Span<byte>) referencebyte[] GetBytes(int) referencestring GetHexString(int, bool) referencevoid GetHexString(Span<char>, bool) referenceint GetInt32(int, int) referenceint GetInt32(int) referenceT[] GetItems<T>(ReadOnlySpan<T>, int) referencevoid GetItems<T>(ReadOnlySpan<T>, Span<T>) referencestring GetString(ReadOnlySpan<char>, int) referencevoid Shuffle<T>(Span<T>) referencebool EndsWith(string, StringComparison) referenceSpanLineEnumerator EnumerateLines() referenceint GetNormalizedLength(NormalizationForm) referencebool IsNormalized(NormalizationForm) referencebool SequenceEqual(string) referenceint Split(Span<Range>, char, StringSplitOptions) referenceint Split(Span<Range>, ReadOnlySpan<char>, StringSplitOptions) referenceint SplitAny(Span<Range>, ReadOnlySpan<char>, StringSplitOptions) referenceint SplitAny(Span<Range>, ReadOnlySpan<string>, StringSplitOptions) referencebool StartsWith(string, StringComparison) referencebool TryNormalize(Span<char>, int, NormalizationForm) referenceint CommonPrefixLength<T>(ReadOnlySpan<T>, IEqualityComparer<T>?) referenceint CommonPrefixLength<T>(ReadOnlySpan<T>) referencebool Contains<T>(T, IEqualityComparer<T>?) referencebool Contains<T>(T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T, T, T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T, T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T) where T : IEquatable<T> referencebool ContainsAnyExceptInRange<T>(T, T) where T : IComparable<T> referencebool ContainsAnyInRange<T>(T, T) where T : IComparable<T> referenceint CountAny<T>(ReadOnlySpan<T>, IEqualityComparer<T>?) referenceint CountAny<T>(ReadOnlySpan<T>) where T : IEquatable<T>? referenceint CountAny<T>(SearchValues<T>) where T : IEquatable<T>? referencebool EndsWith<T>(T) where T : IEquatable<T>? referenceint IndexOf<T>(T, IEqualityComparer<T>?) referenceint IndexOfAny<T>(ReadOnlySpan<T>, IEqualityComparer<T>?) referenceint IndexOfAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T, T, T) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T, T) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T, T, T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T, T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T) where T : IEquatable<T> referenceT? Max<T>(IComparer<T>?) referenceT? Max<T>() referenceT? Min<T>(IComparer<T>?) referenceT? Min<T>() referenceSpanSplitEnumerator<T> Split<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceSpanSplitEnumerator<T> Split<T>(T) where T : IEquatable<T> referenceSpanSplitEnumerator<T> SplitAny<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceSpanSplitEnumerator<T> SplitAny<T>(SearchValues<T>) where T : IEquatable<T> referencebool StartsWith<T>(T) where T : IEquatable<T>? referenceint Count(ReadOnlySpan<char>, int) referenceint Count(ReadOnlySpan<char>) referenceint Count(string) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>, int) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, int, int) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, int) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>) referencebool IsMatch(ReadOnlySpan<char>, int) referencebool IsMatch(ReadOnlySpan<char>) referenceint Count(ReadOnlySpan<char>, string, RegexOptions, TimeSpan) referenceint Count(ReadOnlySpan<char>, string, RegexOptions) referenceint Count(ReadOnlySpan<char>, string) referenceint Count(string, string, RegexOptions, TimeSpan) referenceint Count(string, string, RegexOptions) referenceint Count(string, string) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>, string, RegexOptions, TimeSpan) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>, string, RegexOptions) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>, string) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, string, RegexOptions, TimeSpan) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, string, RegexOptions) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, string) referencebool IsMatch(ReadOnlySpan<char>, string, RegexOptions, TimeSpan) referencebool IsMatch(ReadOnlySpan<char>, string, RegexOptions) referencebool IsMatch(ReadOnlySpan<char>, string) referenceIsMultithreadingSupported referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, sbyte) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, sbyte) referencebool TryParse(ReadOnlySpan<byte>, sbyte) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, sbyte) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, sbyte) referencebool TryParse(ReadOnlySpan<char>, sbyte) referencebool TryParse(string?, IFormatProvider?, sbyte) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referenceint SingleToInt32Bits(float)uint SingleToUInt32Bits(float)bool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, float) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, float) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, float) referencebool TryParse(ReadOnlySpan<char>, float) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, float) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, float) referencebool TryParse(string?, IFormatProvider?, float) referenceValueTask ConnectAsync(EndPoint, CancellationToken) referenceValueTask DisconnectAsync(bool, CancellationToken) referenceValueTask<SocketReceiveFromResult> ReceiveFromAsync(Memory<byte>, SocketFlags, EndPoint, CancellationToken) referenceValueTask<int> SendToAsync(ReadOnlyMemory<byte>, SocketFlags, EndPoint, CancellationToken) referencebool EndsWith(string) referenceSpanLineEnumerator EnumerateLines() referencebool SequenceEqual(string) referencebool StartsWith(string) referenceSpan<char> TrimEnd() referenceSpan<char> TrimStart() referenceint CommonPrefixLength<T>(ReadOnlySpan<T>, IEqualityComparer<T>?) referenceint CommonPrefixLength<T>(ReadOnlySpan<T>) referencebool Contains<T>(T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T, T, T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T, T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T) where T : IEquatable<T> referencebool ContainsAnyExceptInRange<T>(T, T) where T : IComparable<T> referencebool ContainsAnyInRange<T>(T, T) where T : IComparable<T> referenceint IndexOfAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T, T, T) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T, T) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T, T, T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T, T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T) where T : IEquatable<T> referencevoid Sort<T>(Comparison<T>)void Sort<T>() where T : IComparable<T> referencevoid Sort<TKey, TValue, TComparer>(Span<TValue>, TComparer) where TComparer : IComparer<TKey> referencevoid Sort<TKey, TValue>(Span<TValue>, Comparison<TKey>) referencevoid Sort<TKey, TValue>(Span<TValue>) referencevoid EnsureCapacity<T>(int) reference
void TrimExcess<T>(int) reference
bool TryPeek<T>(T) referencebool TryPop<T>(T) referenceTask CopyToAsync(Stream, CancellationToken) referenceValueTask DisposeAsync() referenceint Read(Span<byte>) referenceValueTask<int> ReadAsync(Memory<byte>, CancellationToken) referenceint ReadAtLeast(Span<byte>, int, bool) referenceValueTask<int> ReadAtLeastAsync(Memory<byte>, int, bool, CancellationToken) referencevoid ReadExactly(byte[], int, int) referencevoid ReadExactly(Span<byte>) referenceValueTask ReadExactlyAsync(byte[], int, int, CancellationToken) referenceValueTask ReadExactlyAsync(Memory<byte>, CancellationToken) referencevoid Write(ReadOnlySpan<byte>) referenceValueTask WriteAsync(ReadOnlyMemory<byte>, CancellationToken) referencebool Contains(char, StringComparison) referencebool Contains(char) referencebool Contains(string, StringComparison) referencevoid CopyTo(Span<char>) referencebool EndsWith(char, StringComparison) referencebool EndsWith(char) referenceint GetHashCode(StringComparison) referenceint IndexOf(char, int, int, StringComparison) referenceint IndexOf(char, int, StringComparison) referenceint IndexOf(char, StringComparison) referenceint LastIndexOf(char, int, int, StringComparison) referenceint LastIndexOf(char, int, StringComparison) referenceint LastIndexOf(char, StringComparison) referencestring ReplaceLineEndings(string) referencestring ReplaceLineEndings() referencestring[] Split(char, int, StringSplitOptions) referencestring[] Split(char, StringSplitOptions) referencestring[] Split(string, int, StringSplitOptions) referencestring[] Split(string, StringSplitOptions) referencebool StartsWith(char, StringComparison) referencebool StartsWith(char) referencebool TryCopyTo(Span<char>) referencestring Concat(ReadOnlySpan<object?>) referencestring Concat(ReadOnlySpan<string?>) referencestring Create<TState>(int, TState, System.Buffers.SpanAction<char, TState>) referenceint GetHashCode(ReadOnlySpan<char>, StringComparison) referenceint GetHashCode(ReadOnlySpan<char>) referencestring Join(char, object?[]) referencestring Join(char, ReadOnlySpan<object?>) referencestring Join(char, ReadOnlySpan<string?>) referencestring Join(char, string?[], int, int) referencestring Join(char, string?[]) referencestring Join(string?, ReadOnlySpan<object?>) referencestring Join(string?, ReadOnlySpan<string?>) referencestring Join<T>(char, IEnumerable<T>) referenceTruncated — view the full README on GitHub.
(top 30 of 38)
C#
100.0%
Source only package that exposes newer .NET and C# features to older runtimes.
The package targets netstandard2.0 and is designed to support the following runtimes.
net461, net462, net47, net471, net472, net48, net481netcoreapp2.0, netcoreapp2.1, netcoreapp3.0, netcoreapp3.1net5.0, net6.0, net7.0, net8.0, net9.0, net10.0, net11.0uap10API count: 1031
| Target | APIs |
|---|---|
net461 | 972 |
net462 | 972 |
net47 | 971 |
net471 | 970 |
net472 | 966 |
net48 | 966 |
net481 | 966 |
netstandard2.0 | 968 |
netstandard2.1 | 821 |
netcoreapp2.0 | 891 |
netcoreapp2.1 | 832 |
netcoreapp2.2 | 832 |
netcoreapp3.0 | 779 |
netcoreapp3.1 | 778 |
net5.0 | 650 |
net6.0 | 555 |
net7.0 | 402 |
net8.0 | 283 |
net9.0 | 189 |
net10.0 | 135 |
net11.0 | 58 |
uap10.0 | 958 |
See Milestones for release notes.
It is recommended that projects that consume Polyfill multi-target all TFMs that the project is expected to be consumed in. See Polyfill and TargetFrameworks
This project uses features from the newest stable SDK and C# language. As such consuming projects should target those:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<LangVersion>latest</LangVersion>
{
"sdk": {
"version": "10.0.300",
"rollForward": "latestFeature"
}
}
| Empty Assembly | With Polyfill | Diff | Ensure | ArgumentExceptions | StringInterpolation | Nullability | |
|---|---|---|---|---|---|---|---|
| netstandard2.0 | 8.0KB | 358.5KB | +350.5KB | +7.5KB | +6.5KB | +7.5KB | +12.0KB |
| netstandard2.1 | 8.5KB | 312.5KB | +304.0KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net461 | 8.5KB | 357.0KB | +348.5KB | +7.5KB | +6.5KB | +8.0KB | +12.5KB |
| net462 | 7.0KB | 360.5KB | +353.5KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net47 | 7.0KB | 360.5KB | +353.5KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net471 | 8.5KB | 359.5KB | +351.0KB | +7.5KB | +6.5KB | +7.5KB | +12.0KB |
| net472 | 8.5KB | 358.0KB | +349.5KB | +8.0KB | +6.5KB | +8.0KB | +12.5KB |
| net48 | 8.5KB | 358.0KB | +349.5KB | +8.0KB | +6.5KB | +8.0KB | +12.5KB |
| net481 | 8.5KB | 358.0KB | +349.5KB | +8.0KB | +6.5KB | +8.0KB | +12.5KB |
| netcoreapp2.0 | 9.0KB | 336.0KB | +327.0KB | +8.5KB | +6.5KB | +9.0KB | +13.5KB |
| netcoreapp2.1 | 9.0KB | 316.0KB | +307.0KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| netcoreapp2.2 | 9.0KB | 316.0KB | +307.0KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| netcoreapp3.0 | 9.5KB | 308.5KB | +299.0KB | +9.0KB | +6.5KB | +9.0KB | +14.0KB |
| netcoreapp3.1 | 9.5KB | 307.0KB | +297.5KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net5.0 | 9.5KB | 271.0KB | +261.5KB | +9.0KB | +6.5KB | +9.0KB | +13.5KB |
| net6.0 | 10.0KB | 212.5KB | +202.5KB | +10.0KB | +7.0KB | +512bytes | +3.5KB |
| net7.0 | 10.0KB | 175.0KB | +165.0KB | +11.5KB | +8.0KB | +512bytes | +3.0KB |
| net8.0 | 9.5KB | 145.5KB | +136.0KB | +8.5KB | +512bytes | +3.0KB | |
| net9.0 | 9.5KB | 98.5KB | +89.0KB | +8.5KB | +512bytes | +3.5KB | |
| net10.0 | 10.0KB | 76.0KB | +66.0KB | +8.5KB | +512bytes | +3.5KB | |
| net11.0 | 10.0KB | 20.5KB | +10.5KB | +9.0KB | +512bytes | +3.5KB |
| Empty Assembly | With Polyfill | Diff | Ensure | ArgumentExceptions | StringInterpolation | Nullability | |
|---|---|---|---|---|---|---|---|
| netstandard2.0 | 8.0KB | 524.4KB | +516.4KB | +15.2KB | +8.2KB | +12.4KB | +17.4KB |
| netstandard2.1 | 8.5KB | 451.8KB | +443.3KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net461 | 8.5KB | 524.0KB | +515.5KB | +15.2KB | +8.2KB | +12.9KB | +17.9KB |
| net462 | 7.0KB | 527.5KB | +520.5KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net47 | 7.0KB | 527.2KB | +520.2KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net471 | 8.5KB | 525.8KB | +517.3KB | +15.2KB | +8.2KB | +12.4KB | +17.4KB |
| net472 | 8.5KB | 523.3KB | +514.8KB | +15.7KB | +8.2KB | +12.9KB | +17.9KB |
| net48 | 8.5KB | 523.3KB | +514.8KB | +15.7KB | +8.2KB | +12.9KB | +17.9KB |
| net481 | 8.5KB | 523.3KB | +514.8KB | +15.7KB | +8.2KB | +12.9KB | +17.9KB |
| netcoreapp2.0 | 9.0KB | 491.3KB | +482.3KB | +16.2KB | +8.2KB | +13.9KB | +18.9KB |
| netcoreapp2.1 | 9.0KB | 459.0KB | +450.0KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| netcoreapp2.2 | 9.0KB | 459.0KB | +450.0KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| netcoreapp3.0 | 9.5KB | 442.7KB | +433.2KB | +16.7KB | +8.2KB | +13.9KB | +19.4KB |
| netcoreapp3.1 | 9.5KB | 441.2KB | +431.7KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net5.0 | 9.5KB | 387.0KB | +377.5KB | +16.7KB | +8.2KB | +13.9KB | +18.9KB |
| net6.0 | 10.0KB | 308.4KB | +298.4KB | +17.7KB | +8.7KB | +1.1KB | +4.2KB |
| net7.0 | 10.0KB | 252.3KB | +242.3KB | +19.1KB | +9.4KB | +1.1KB | +3.7KB |
| net8.0 | 9.5KB | 207.3KB | +197.8KB | +16.0KB | +299bytes | +1.1KB | +3.7KB |
| net9.0 | 9.5KB | 139.1KB | +129.6KB | +16.0KB | +1.1KB | +4.2KB | |
| net10.0 | 10.0KB | 108.0KB | +98.0KB | +16.0KB | +1.1KB | +4.2KB | |
| net11.0 | 10.0KB | 30.3KB | +20.3KB | +16.5KB | +1.1KB | +4.2KB |
To consume Polyfill as a library (instead of a source-only package) see PolyfillLib
Make sure DefineConstants is not set from dotnet CLI, which would override important constants set by Polyfill.
Instead of using dotnet publish -p:DefineConstants=MY_CONSTANT, set the constant indirectly in the project:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants Condition="'$(MyConstant)' == 'true'">$(DefineConstants);MY_CONSTANT</DefineConstants>
and use dotnet publish -p:MyConstant=true.
Reference: Module Initializers
static bool InitCalled;
[Test]
public async Task ModuleInitTest() =>
await Assert.That(InitCalled).IsTrue();
[ModuleInitializer]
public static void ModuleInit() =>
InitCalled = true;
Reference: init (C# Reference)
class InitSample
{
public int Member { get; init; }
}
Reference: Nullable reference types
Reference: C# required modifier
public class Person
{
public Person()
{
}
[SetsRequiredMembers]
public Person(string name) =>
Name = name;
public required string Name { get; init; }
}
Indicates that compiler support for a particular feature is required for the location where this attribute is applied.
Can be used to make types compatible with collection expressions
Indicates that the specified method parameter expects a constant.
Reference: SkipLocalsInitAttribute
the SkipLocalsInit attribute prevents the compiler from setting the .locals init flag when emitting to metadata. The SkipLocalsInit attribute is a single-use attribute and can be applied to a method, a property, a class, a struct, an interface, or a module, but not to an assembly. SkipLocalsInit is an alias for SkipLocalsInitAttribute.
class SkipLocalsInitSample
{
[SkipLocalsInit]
static void ReadUninitializedMemory()
{
Span<int> numbers = stackalloc int[120];
for (var i = 0; i < 120; i++)
{
Console.WriteLine(numbers[i]);
}
}
}
Reference: Indices and ranges
If consuming in a project that targets net461 or net462, a reference to System.ValueTuple is required. See References: System.ValueTuple.
class IndexRangeSample
{
[Test]
public async Task Range()
{
var substring = "value"[2..];
await Assert.That(substring).IsEqualTo("lue");
}
[Test]
public async Task Index()
{
var ch = "value"[^2];
await Assert.That(ch).IsEqualTo('u');
}
[Test]
public async Task ArrayIndex()
{
var array = new[]
{
"value1",
"value2"
};
var value = array[^2];
await Assert.That(value).IsEqualTo("value1");
}
}
C# introduces a new attribute, System.Runtime.CompilerServices.OverloadResolutionPriority, that can be used by API authors to adjust the relative priority of overloads within a single type as a means of steering API consumers to use specific APIs, even if those APIs would normally be considered ambiguous or otherwise not be chosen by C#'s overload resolution rules. This helps framework and library authors guide API usage as they APIs as they develop new and better patterns.
The OverloadResolutionPriorityAttribute can be used in conjunction with the ObsoleteAttribute. A library author may mark properties, methods, types and other programming elements as obsolete, while leaving them in place for backwards compatibility. Using programming elements marked with the ObsoleteAttribute will result in compiler warnings or errors. However, the type or member is still visible to overload resolution and may be selected over a better overload or cause an ambiguity failure. The OverloadResolutionPriorityAttribute lets library authors fix these problems by lowering the priority of obsolete members when there are better alternatives.
public class OverloadResolutionPriorityAttributeTests
{
[Test]
public Task Run()
{
int[] arr = [1, 2, 3];
//Prints "Span" because resolution priority is higher
Method(arr);
return Task.CompletedTask;
}
[OverloadResolutionPriority(2)]
static void Method(ReadOnlySpan<int> list) =>
Console.WriteLine("Span");
[OverloadResolutionPriority(1)]
static void Method(int[] list) =>
Console.WriteLine("Array");
}
Reference: Low Level Struct Improvements
struct UnscopedRefUsage
{
int field1;
[UnscopedRef] ref int Prop1 => ref field1;
}
Reference: CallerArgumentExpression
static class FileUtil
{
public static void FileExists(string path, [CallerArgumentExpression("path")] string name = "")
{
if (!File.Exists(path))
{
throw new ArgumentException($"File not found. Path: {path}", name);
}
}
}
static class FileUtilUsage
{
public static string[] Method(string path)
{
FileUtil.FileExists(path);
return File.ReadAllLines(path);
}
}
Enable by adding an MSBuild property PolyStringInterpolation
<PropertyGroup>
...
<PolyStringInterpolation>true</PolyStringInterpolation>
</PropertyGroup>
References: String Interpolation in C# 10 and .NET 6, Write a custom string interpolation handler
[!IMPORTANT] In the below extension method list, the methods using
AppendInterpolatedStringHandlerparameter are not extensions because the compiler prefers to use the overload withstringparameter instead.
Reference: .NET 7 - The StringSyntaxAttribute
Reference: Prepare .NET libraries for trimming
Reference: Platform compatibility analyzer
Reference: C# – Hide a method from the stack trace
Reference: Improvements in native code interop in .NET 5.0
The class Polyfill includes the following extension methods:
Requires
<PolyArgumentExceptions>true</PolyArgumentExceptions>in the consuming project.
Requires
<PolyArgumentExceptions>true</PolyArgumentExceptions>in the consuming project.
Requires
<PolyArgumentExceptions>true</PolyArgumentExceptions>in the consuming project.
void ThrowIfEqual<T>(T, T) where T : IEquatable<T>? referencevoid ThrowIfGreaterThan(nint, nint)void ThrowIfGreaterThan<T>(T, T) where T : IComparable<T> referencevoid ThrowIfGreaterThanOrEqual(nint, nint)void ThrowIfGreaterThanOrEqual<T>(T, T) where T : IComparable<T> referencevoid ThrowIfLessThan(nint, nint)void ThrowIfLessThan<T>(T, T) where T : IComparable<T> referencevoid ThrowIfLessThanOrEqual(nint, nint)void ThrowIfLessThanOrEqual<T>(T, T) where T : IComparable<T> referencevoid ThrowIfNegative(nint) referencevoid ThrowIfNegative<T>(T) where T : struct, IComparable<T> referencevoid ThrowIfNegativeOrZero(nint)void ThrowIfNegativeOrZero<T>(T) where T : struct, IComparable<T> referencevoid ThrowIfNotEqual<T>(T, T) where T : IEquatable<T>? referencevoid ThrowIfZero(nint)void ThrowIfZero<T>(T) where T : struct, IEquatable<T> referencevoid CopyTo<T>(ArraySegment<T>) referencevoid CopyTo<T>(T[], int) referencevoid CopyTo<T>(T[]) referenceArraySegmentEnumerator<T> GetEnumerator<T>() referenceOperationStatus DecodeFromChars(ReadOnlySpan<char>, Span<byte>, int, int, bool) referenceint DecodeFromChars(ReadOnlySpan<char>, Span<byte>) referencebyte[] DecodeFromChars(ReadOnlySpan<char>) referencebyte[] DecodeFromUtf8(ReadOnlySpan<byte>) referenceOperationStatus EncodeToChars(ReadOnlySpan<byte>, Span<char>, int, int, bool) referenceint EncodeToChars(ReadOnlySpan<byte>, Span<char>) referencechar[] EncodeToChars(ReadOnlySpan<byte>) referencestring EncodeToString(ReadOnlySpan<byte>) referencebyte[] EncodeToUtf8(ReadOnlySpan<byte>) referenceint GetEncodedLength(int) referenceint GetMaxDecodedLength(int) referencebool TryDecodeFromChars(ReadOnlySpan<char>, Span<byte>, int) referencebool TryEncodeToChars(ReadOnlySpan<byte>, Span<char>, int) referencedouble ReadDoubleBigEndian(ReadOnlySpan<byte>) referencedouble ReadDoubleLittleEndian(ReadOnlySpan<byte>) referencefloat ReadSingleBigEndian(ReadOnlySpan<byte>) referencefloat ReadSingleLittleEndian(ReadOnlySpan<byte>) referencebool TryReadDoubleBigEndian(ReadOnlySpan<byte>, double) referencebool TryReadDoubleLittleEndian(ReadOnlySpan<byte>, double) referencebool TryReadSingleBigEndian(ReadOnlySpan<byte>, float) referencebool TryReadSingleLittleEndian(ReadOnlySpan<byte>, float) referencebool TryWriteDoubleBigEndian(Span<byte>, double) referencebool TryWriteDoubleLittleEndian(Span<byte>, double) referencebool TryWriteSingleBigEndian(Span<byte>, float) referencebool TryWriteSingleLittleEndian(Span<byte>, float) referencevoid WriteDoubleBigEndian(Span<byte>, double) referencevoid WriteDoubleLittleEndian(Span<byte>, double) referencevoid WriteSingleBigEndian(Span<byte>, float) referencevoid WriteSingleLittleEndian(Span<byte>, float) referencebool TryFormat(Span<char>, int) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, byte) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, byte) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, byte) referencebool TryParse(ReadOnlySpan<char>, byte) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, byte) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, byte) referencebool TryParse(string?, IFormatProvider?, byte) referenceCancellationTokenRegistration Register(Action<object?, CancellationToken>, object?) referenceCancellationTokenRegistration UnsafeRegister(Action<object?, CancellationToken>, object?) referenceCancellationTokenRegistration UnsafeRegister(Action<object?>, object?) referenceTask CancelAsync() referenceValueSpan referencebool Equals(char, StringComparison) referencebool IsAscii(char) referencebool IsAsciiDigit(char) referencebool IsAsciiHexDigit(char) referencebool IsAsciiHexDigitLower(char) referencebool IsAsciiHexDigitUpper(char) referencebool IsAsciiLetter(char) referencebool IsAsciiLetterLower(char) referencebool IsAsciiLetterOrDigit(char) referencebool IsAsciiLetterUpper(char) referencebool IsBetween(char, char, char) referencevoid Clear<T>() referenceTValue GetOrAdd<TKey, TValue, TArg>(TKey, Func<TKey, TArg, TValue>, TArg) where TKey : notnull referencevoid Clear<T>() referencebool Remove<TKey, TValue>(TKey, TValue) where TKey : class where TValue : class reference
SafeFileHandle OpenStandardErrorHandle() referenceSafeFileHandle OpenStandardInputHandle() referenceSafeFileHandle OpenStandardOutputHandle() referenceOperationStatus FromHexString(ReadOnlySpan<byte>, Span<byte>, int, int) referencebyte[] FromHexString(ReadOnlySpan<byte>) referenceOperationStatus FromHexString(ReadOnlySpan<char>, Span<byte>, int, int) referencebyte[] FromHexString(ReadOnlySpan<char>) referenceOperationStatus FromHexString(string, Span<byte>, int, int) referencebyte[] FromHexString(string) referencestring ToHexString(byte[], int, int) referencestring ToHexString(byte[]) referencestring ToHexString(ReadOnlySpan<byte>) referencestring ToHexStringLower(byte[], int, int) referencestring ToHexStringLower(byte[]) referencestring ToHexStringLower(ReadOnlySpan<byte>) referencebool TryFromBase64Chars(ReadOnlySpan<char>, Span<byte>, int) referencebool TryFromBase64String(string, Span<byte>, int) referencebool TryToBase64Chars(ReadOnlySpan<byte>, Span<char>, int, Base64FormattingOptions) referencebool TryToHexString(ReadOnlySpan<byte>, Span<byte>, int) referencebool TryToHexString(ReadOnlySpan<byte>, Span<char>, int) referencebool TryToHexStringLower(ReadOnlySpan<byte>, Span<byte>, int) referencebool TryToHexStringLower(ReadOnlySpan<byte>, Span<char>, int) referencevoid Deconstruct(int, int, int) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referenceDateTime AddMicroseconds(double) referencevoid Deconstruct(DateOnly, TimeOnly) referencevoid Deconstruct(int, int, int) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<char>, DateTime) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, DateTime) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, DateTimeStyles, DateTime) referencebool TryParse(string?, IFormatProvider?, DateTime) referencebool TryParseExact(ReadOnlySpan<char>, ReadOnlySpan<char>, IFormatProvider?, DateTimeStyles, DateTime) referencebool TryParseExact(ReadOnlySpan<char>, string, IFormatProvider?, DateTimeStyles, DateTime) referenceMicrosecond referenceNanosecond referenceDateTimeOffset AddMicroseconds(double) referencevoid Deconstruct(DateOnly, TimeOnly, TimeSpan) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<char>, DateTimeOffset) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, DateTimeOffset) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, DateTimeStyles, DateTimeOffset) referencebool TryParse(string?, IFormatProvider?, DateTimeOffset) referencebool TryParseExact(ReadOnlySpan<char>, ReadOnlySpan<char>, IFormatProvider?, DateTimeStyles, DateTimeOffset) referencebool TryParseExact(ReadOnlySpan<char>, string, IFormatProvider?, DateTimeStyles, DateTimeOffset) referenceMicrosecond referenceNanosecond referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, decimal) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, decimal) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, decimal) referencebool TryParse(ReadOnlySpan<char>, decimal) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, decimal) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, decimal) referencebool TryParse(string?, IFormatProvider?, decimal) referencevoid Clear() referenceInvocationListEnumerator<TDelegate> EnumerateInvocationList<TDelegate>(TDelegate?) where TDelegate : Delegate referenceHasSingleTarget referencevoid EnsureCapacity<TKey, TValue>(int) reference
DictionaryAlternateLookup<TKey, TValue, TAlternateKey> GetAlternateLookup<TKey, TValue, TAlternateKey>() where TKey : notnull reference
DictionaryAlternateLookup<TKey, TValue, TAlternateKey> rather than the BCL's nested Dictionary<TKey, TValue>.AlternateLookup<TAlternateKey>. Use var for cross-target code.void TrimExcess<TKey, TValue>(int) reference
void TrimExcess<TKey, TValue>() reference
bool TryGetAlternateLookup<TKey, TValue, TAlternateKey>(DictionaryAlternateLookup<TKey, TValue, TAlternateKey>) where TKey : notnull reference
void Deconstruct(object, object?) referenceDirectoryInfo CreateTempSubdirectory(string?) referenceIEnumerable<string> EnumerateDirectories(string, string, EnumerationOptions) referenceIEnumerable<string> EnumerateFiles(string, string, EnumerationOptions) referenceIEnumerable<string> EnumerateFileSystemEntries(string, string, EnumerationOptions) referencestring[] GetDirectories(string, string, EnumerationOptions) referencestring[] GetFiles(string, string, EnumerationOptions) referencestring[] GetFileSystemEntries(string, string, EnumerationOptions) referenceIEnumerable<DirectoryInfo> EnumerateDirectories(string, EnumerationOptions) referenceIEnumerable<FileInfo> EnumerateFiles(string, EnumerationOptions) referenceIEnumerable<FileSystemInfo> EnumerateFileSystemInfos(string, EnumerationOptions) referenceDirectoryInfo[] GetDirectories(string, EnumerationOptions) referenceFileInfo[] GetFiles(string, EnumerationOptions) referenceFileSystemInfo[] GetFileSystemInfos(string, EnumerationOptions) referenceulong DoubleToUInt64Bits(double)bool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, double) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, double) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, double) referencebool TryParse(ReadOnlySpan<char>, double) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, double) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, double) referencebool TryParse(string?, IFormatProvider?, double) referencevoid Convert(ReadOnlySpan<char>, Span<byte>, bool, int, int, bool) referenceint GetByteCount(ReadOnlySpan<char>) referenceint GetBytes(ReadOnlySpan<char>, Span<byte>) referenceint GetCharCount(ReadOnlySpan<byte>) referenceint GetChars(ReadOnlySpan<byte>, Span<char>) referencestring GetString(ReadOnlySpan<byte>) referencebool TryGetBytes(ReadOnlySpan<char>, Span<byte>, int) referencebool TryGetChars(ReadOnlySpan<byte>, Span<char>, int) referenceLatin1 referencePreamble reference
string[] GetNames<TEnum>() where TEnum : struct, Enum referenceTEnum[] GetValues<TEnum>() where TEnum : struct, Enum referenceArray GetValuesAsUnderlyingType(Type) referenceArray GetValuesAsUnderlyingType<TEnum>() where TEnum : struct, Enum referencebool IsDefined<TEnum>(TEnum) where TEnum : struct, Enum referenceTEnum Parse<TEnum>(ReadOnlySpan<char>, bool) where TEnum : struct, Enum referenceTEnum Parse<TEnum>(ReadOnlySpan<char>) where TEnum : struct, Enum referenceTEnum Parse<TEnum>(string, bool) where TEnum : struct, Enum referenceTEnum Parse<TEnum>(string) where TEnum : struct, Enum referencebool TryFormat<TEnum>(TEnum, Span<char>, int, ReadOnlySpan<char>) where TEnum : struct, Enum referencebool TryParse<TEnum>(ReadOnlySpan<char>, bool, TEnum) where TEnum : struct, Enum referencebool TryParse<TEnum>(ReadOnlySpan<char>, TEnum) where TEnum : struct, Enum referenceIEnumerable<T> InfiniteSequence<T>(T, T) where T : IAdditionOperators<T, T, T> referenceIEnumerable<T> Sequence<T>(T, T, T) where T : INumber<T> referenceEqualityComparer<T> Create(Func<T?, T?, bool>, Func<T, int>?) referenceEqualityComparer<T> Create<TKey>(Func<T?, TKey?>, IEqualityComparer<TKey>?) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool IsNullable()Exception SetCurrentStackTrace(Exception) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool IsNullable()void AppendAllBytes(string, byte[]) referencevoid AppendAllBytes(string, ReadOnlySpan<byte>) referenceTask AppendAllBytesAsync(string, byte[], CancellationToken) referenceTask AppendAllBytesAsync(string, ReadOnlyMemory<byte>, CancellationToken) referenceTask AppendAllLinesAsync(string, IEnumerable<string>, CancellationToken) referenceTask AppendAllLinesAsync(string, IEnumerable<string>, Encoding, CancellationToken) referencevoid AppendAllText(string, ReadOnlySpan<char>, Encoding) referencevoid AppendAllText(string, ReadOnlySpan<char>) referenceTask AppendAllTextAsync(string, ReadOnlyMemory<char>, CancellationToken) referenceTask AppendAllTextAsync(string, ReadOnlyMemory<char>, Encoding, CancellationToken) referenceTask AppendAllTextAsync(string, string?, CancellationToken) referenceTask AppendAllTextAsync(string, string?, Encoding, CancellationToken) referenceFileSystemInfo CreateHardLink(string, string) referencevoid Move(string, string, bool) referenceSafeFileHandle OpenNullHandle() referenceTask<byte[]> ReadAllBytesAsync(string, CancellationToken) referenceTask<string[]> ReadAllLinesAsync(string, CancellationToken) referenceTask<string[]> ReadAllLinesAsync(string, Encoding, CancellationToken) referenceTask<string> ReadAllTextAsync(string, CancellationToken) referenceTask<string> ReadAllTextAsync(string, Encoding, CancellationToken) referenceIAsyncEnumerable<string> ReadLinesAsync(string, CancellationToken) referenceIAsyncEnumerable<string> ReadLinesAsync(string, Encoding, CancellationToken) referenceTask WriteAllBytesAsync(string, byte[], CancellationToken) referenceTask WriteAllBytesAsync(string, ReadOnlyMemory<byte>, CancellationToken) referenceTask WriteAllLinesAsync(string, IEnumerable<string>, CancellationToken) referenceTask WriteAllLinesAsync(string, IEnumerable<string>, Encoding, CancellationToken) referencevoid WriteAllText(string, ReadOnlySpan<char>, Encoding) referencevoid WriteAllText(string, ReadOnlySpan<char>) referenceTask WriteAllTextAsync(string, string?, CancellationToken) referenceTask WriteAllTextAsync(string, string?, Encoding, CancellationToken) referencevoid CreateAsHardLink(string) referenceT[] AllocateUninitializedArray<T>(int, bool) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>) referenceGuid CreateVersion7() referenceGuid CreateVersion7(DateTimeOffset) referenceGuid Parse(ReadOnlySpan<byte>) referencebool TryParse(ReadOnlySpan<byte>, Guid) referencebool TryParse(ReadOnlySpan<char>, Guid) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, Guid) referencebool TryParse(string?, IFormatProvider?, Guid) referencebool TryParseExact(ReadOnlySpan<char>, ReadOnlySpan<char>, Guid) referenceAllBitsSet referencevoid EnsureCapacity<T>(int) reference
HashSetAlternateLookup<T, TAlternate> GetAlternateLookup<T, TAlternate>() reference
HashSetAlternateLookup<T, TAlternate> rather than the BCL's nested HashSet<T>.AlternateLookup<TAlternate>. Use var for cross-target code.void TrimExcess<T>(int) reference
bool TryGetAlternateLookup<T, TAlternate>(HashSetAlternateLookup<T, TAlternate>) reference
bool TryGetValue<T>(T, T) referenceTask<byte[]> GetByteArrayAsync(string, CancellationToken) referenceTask<byte[]> GetByteArrayAsync(Uri, CancellationToken) referenceTask<Stream> GetStreamAsync(string, CancellationToken) referenceTask<Stream> GetStreamAsync(Uri, CancellationToken) referenceTask<string> GetStringAsync(string, CancellationToken) referenceTask<string> GetStringAsync(Uri, CancellationToken) referenceTask<HttpResponseMessage> PatchAsync(string?, HttpContent?, CancellationToken) referenceTask<HttpResponseMessage> PatchAsync(string?, HttpContent?) referenceTask<HttpResponseMessage> PatchAsync(Uri?, HttpContent?, CancellationToken) referenceTask<HttpResponseMessage> PatchAsync(Uri?, HttpContent?) referenceHttpResponseMessage Send(HttpRequestMessage, CancellationToken) referenceHttpResponseMessage Send(HttpRequestMessage, HttpCompletionOption, CancellationToken) referenceHttpResponseMessage Send(HttpRequestMessage, HttpCompletionOption) referenceHttpResponseMessage Send(HttpRequestMessage) referencevoid CopyTo(Stream, System.Net.TransportContext?, CancellationToken) referenceTask CopyToAsync(Stream, CancellationToken) referenceTask CopyToAsync(Stream, System.Net.TransportContext?, CancellationToken) referenceTask LoadIntoBufferAsync(CancellationToken) referenceTask LoadIntoBufferAsync(long, CancellationToken) referenceTask<byte[]> ReadAsByteArrayAsync(CancellationToken) referenceStream ReadAsStream(CancellationToken) referenceTask<Stream> ReadAsStreamAsync(CancellationToken) referenceTask<string> ReadAsStringAsync(CancellationToken) referenceReadOnlyDictionary<TKey, TValue> AsReadOnly<TKey, TValue>() where TKey : notnull referencebool Remove<TKey, TValue>(TKey, TValue) where TKey : notnull referencebool TryAdd<TKey, TValue>(TKey, TValue) where TKey : notnull referenceDictionary<TKey, TValue> ToDictionary<TKey, TValue>(IEqualityComparer<TKey>?) where TKey : notnull referenceIOrderedEnumerable<T> Order<T>(IComparer<T>?) referenceIOrderedEnumerable<T> Order<T>() referenceIOrderedEnumerable<T> OrderDescending<T>(IComparer<T>?) referenceIOrderedEnumerable<T> OrderDescending<T>() referenceIEnumerable<(TFirst First, TSecond Second, TThird Third)> Zip<TFirst, TSecond, TThird>(IEnumerable<TSecond>, IEnumerable<TThird>) referenceIEnumerable<(TFirst First, TSecond Second)> Zip<TFirst, TSecond>(IEnumerable<TSecond>) referenceIEnumerable<TResult> FullJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter?, TInner?, TResult>, IEqualityComparer<TKey>?) referenceIEnumerable<(TOuter? Outer, TInner? Inner)> FullJoin<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<IGrouping<TOuter, TInner>> GroupJoin<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<(TOuter Outer, TInner Inner)> Join<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TResult> LeftJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner?, TResult>, IEqualityComparer<TKey>?) referenceIEnumerable<TResult> LeftJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner?, TResult>) referenceIEnumerable<(TOuter Outer, TInner? Inner)> LeftJoin<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TResult> RightJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter?, TInner, TResult>, IEqualityComparer<TKey>?) referenceIEnumerable<TResult> RightJoin<TOuter, TInner, TKey, TResult>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter?, TInner, TResult>) referenceIEnumerable<(TOuter? Outer, TInner Inner)> RightJoin<TOuter, TInner, TKey>(IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<KeyValuePair<TKey, TAccumulate>> AggregateBy<TSource, TKey, TAccumulate>(Func<TSource, TKey>, Func<TKey, TAccumulate>, Func<TAccumulate, TSource, TAccumulate>, IEqualityComparer<TKey>?) where TKey : notnull referenceIEnumerable<KeyValuePair<TKey, TAccumulate>> AggregateBy<TSource, TKey, TAccumulate>(Func<TSource, TKey>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>, IEqualityComparer<TKey>?) where TKey : notnull referenceIEnumerable<TSource> Append<TSource>(TSource) referenceIEnumerable<TSource[]> Chunk<TSource>(int) referenceIEnumerable<KeyValuePair<TKey, int>> CountBy<TSource, TKey>(Func<TSource, TKey>, IEqualityComparer<TKey>?) where TKey : notnull referenceIEnumerable<TSource> DistinctBy<TSource, TKey>(Func<TSource, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TSource> DistinctBy<TSource, TKey>(Func<TSource, TKey>) referenceTSource ElementAt<TSource>(Index) referenceTSource? ElementAtOrDefault<TSource>(Index) referenceIEnumerable<TSource> Except<TSource>(IEqualityComparer<TSource>?, TSource[]) referenceIEnumerable<TSource> Except<TSource>(TSource, IEqualityComparer<TSource>?) referenceIEnumerable<TSource> Except<TSource>(TSource) referenceIEnumerable<TSource> ExceptBy<TSource, TKey>(IEnumerable<TKey>, Func<TSource, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TSource> ExceptBy<TSource, TKey>(IEnumerable<TKey>, Func<TSource, TKey>) referenceTSource FirstOrDefault<TSource>(Func<TSource, bool>, TSource) referenceTSource FirstOrDefault<TSource>(TSource) referenceIEnumerable<(int Index, TSource Item)> Index<TSource>() referenceIEnumerable<TSource> IntersectBy<TSource, TKey>(IEnumerable<TKey>, Func<TSource, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TSource> IntersectBy<TSource, TKey>(IEnumerable<TKey>, Func<TSource, TKey>) referenceTSource LastOrDefault<TSource>(Func<TSource, bool>, TSource) referenceTSource LastOrDefault<TSource>(TSource) referenceTSource? Max<TSource>(IComparer<TSource>?) referenceTSource? MaxBy<TSource, TKey>(Func<TSource, TKey>, IComparer<TKey>?) referenceTSource? MaxBy<TSource, TKey>(Func<TSource, TKey>) referenceTSource? Min<TSource>(IComparer<TSource>?) referenceTSource? MinBy<TSource, TKey>(Func<TSource, TKey>, IComparer<TKey>?) referenceTSource? MinBy<TSource, TKey>(Func<TSource, TKey>) referenceIEnumerable<TSource> Prepend<TSource>(TSource) referenceTSource SingleOrDefault<TSource>(Func<TSource, bool>, TSource) referenceTSource SingleOrDefault<TSource>(TSource) referenceIEnumerable<TSource> SkipLast<TSource>(int) referenceIEnumerable<TSource> Take<TSource>(Range) referenceIEnumerable<TSource> TakeLast<TSource>(int) referenceHashSet<TSource> ToHashSet<TSource>(IEqualityComparer<TSource>?) referencebool TryGetNonEnumeratedCount<TSource>(int) referenceIEnumerable<TSource> UnionBy<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>, IEqualityComparer<TKey>?) referenceIEnumerable<TSource> UnionBy<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>) referenceReadOnlyCollection<T> AsReadOnly<T>() referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, short) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, short) referencebool TryParse(ReadOnlySpan<byte>, short) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, short) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, short) referencebool TryParse(ReadOnlySpan<char>, short) referencebool TryParse(string?, IFormatProvider?, short) referencefloat Int32BitsToSingle(int)bool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, int) referencebool TryParse(ReadOnlySpan<byte>, int) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, int) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, int) referencebool TryParse(ReadOnlySpan<char>, int) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, int) referencebool TryParse(string?, IFormatProvider?, int) referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, long) referencebool TryParse(ReadOnlySpan<byte>, long) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, long) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, long) referencebool TryParse(ReadOnlySpan<char>, long) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, long) referencebool TryParse(string?, IFormatProvider?, long) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, nint) referencebool TryParse(ReadOnlySpan<byte>, nint) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, nint) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, nint) referencebool TryParse(ReadOnlySpan<char>, nint) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, nint) referencebool TryParse(string?, IFormatProvider?, nint) referencebool TryParse(string?, nint) referencebool TryParse(string?, NumberStyles, IFormatProvider?, nint) referenceIPAddress Parse(ReadOnlySpan<char>) referencebool TryParse(ReadOnlySpan<byte>, IPAddress?) referencebool TryParse(ReadOnlySpan<char>, IPAddress?) referenceTValue GetValueOrDefault<TKey, TValue>(TKey, TValue) where TKey : notnull referenceTValue? GetValueOrDefault<TKey, TValue>(TKey) referenceReadOnlySet<T> AsReadOnly<T>() referencevoid Deconstruct<TKey, TValue>(TKey, TValue) referencevoid AddRange<T>(ReadOnlySpan<T>) referencevoid CopyTo<T>(Span<T>) referencevoid EnsureCapacity<T>(int) reference
void InsertRange<T>(int, ReadOnlySpan<T>) referencevoid TrimExcess<T>()
byte Clamp(byte, byte, byte) referencedecimal Clamp(decimal, decimal, decimal) referencedouble Clamp(double, double, double) referencefloat Clamp(float, float, float) referenceint Clamp(int, int, int) referencelong Clamp(long, long, long) referencenint Clamp(nint, nint, nint) referencenuint Clamp(nuint, nuint, nuint) referencesbyte Clamp(sbyte, sbyte, sbyte) referenceshort Clamp(short, short, short) referenceuint Clamp(uint, uint, uint) referenceulong Clamp(ulong, ulong, ulong) referenceushort Clamp(ushort, ushort, ushort) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool HasSameMetadataDefinitionAs(MemberInfo) referencebool IsNullable()T CreateDelegate<T>(object?) where T : Delegate referenceT CreateDelegate<T>() where T : Delegate referenceRequires
<PolyArgumentExceptions>true</PolyArgumentExceptions>in the consuming project.
bool IsAndroid() referencebool IsAndroidVersionAtLeast(int, int, int, int) referencebool IsBrowser() referencebool IsFreeBSD() referencebool IsFreeBSDVersionAtLeast(int, int, int, int) referencebool IsIOS() referencebool IsIOSVersionAtLeast(int, int, int) referencebool IsLinux() referencebool IsMacCatalyst() referencebool IsMacCatalystVersionAtLeast(int, int, int) referencebool IsMacOS() referencebool IsMacOSVersionAtLeast(int, int, int) referencebool IsOSPlatform(string) referencebool IsOSPlatformVersionAtLeast(string, int, int, int, int) referencebool IsTvOS() referencebool IsTvOSVersionAtLeast(int, int, int) referencebool IsWasi() referencebool IsWatchOS() referencebool IsWatchOSVersionAtLeast(int, int, int) referencebool IsWindows() referencebool IsWindowsVersionAtLeast(int, int, int, int) referencebool TryAdd<TKey, TValue>(TKey, TValue, int) where TKey : notnull referencebool TryGetValue<TKey, TValue>(TKey, TValue, int) where TKey : notnull referenceTask ForEachAsync<T>(IAsyncEnumerable<T>, CancellationToken, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IAsyncEnumerable<T>, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IAsyncEnumerable<T>, ParallelOptions, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IEnumerable<T>, CancellationToken, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IEnumerable<T>, Func<T, CancellationToken, ValueTask>) referenceTask ForEachAsync<T>(IEnumerable<T>, ParallelOptions, Func<T, CancellationToken, ValueTask>) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool IsNullable()string Combine(ReadOnlySpan<string>) referencebool EndsInDirectorySeparator(ReadOnlySpan<char>) referencebool EndsInDirectorySeparator(string) referencebool Exists(string?) referenceReadOnlySpan<char> GetDirectoryName(ReadOnlySpan<char>) referenceReadOnlySpan<char> GetExtension(ReadOnlySpan<char>) referenceReadOnlySpan<char> GetFileName(ReadOnlySpan<char>) referenceReadOnlySpan<char> GetFileNameWithoutExtension(ReadOnlySpan<char>) referencestring GetRelativePath(string, string) referencebool HasExtension(ReadOnlySpan<char>) referencebool IsPathRooted(ReadOnlySpan<char>) referencestring Join(string?[]) referenceReadOnlySpan<char> TrimEndingDirectorySeparator(ReadOnlySpan<char>) referencestring TrimEndingDirectorySeparator(string) referencebool Remove<TElement, TPriority>(TElement, TElement, TPriority, IEqualityComparer<TElement>?) referencevoid Kill(bool) reference(byte[] StandardOutput, byte[] StandardError) ReadAllBytes(TimeSpan?) referenceTask<(byte[] StandardOutput, byte[] StandardError)> ReadAllBytesAsync(CancellationToken) referenceIAsyncEnumerable<ProcessOutputLine> ReadAllLinesAsync(CancellationToken) reference(string StandardOutput, string StandardError) ReadAllText(TimeSpan?) referenceTask<(string StandardOutput, string StandardError)> ReadAllTextAsync(CancellationToken) referenceTask WaitForExitAsync(CancellationToken) referenceProcessExitStatus Run(ProcessStartInfo, TimeSpan?) referenceProcessExitStatus Run(string, IList<string>?, bool, TimeSpan?) reference
ProcessTextOutput RunAndCaptureText(ProcessStartInfo, TimeSpan?) referenceProcessTextOutput RunAndCaptureText(string, IList<string>?, TimeSpan?) referenceTask<ProcessTextOutput> RunAndCaptureTextAsync(ProcessStartInfo, CancellationToken) referenceTask<ProcessTextOutput> RunAndCaptureTextAsync(string, IList<string>?, CancellationToken) referenceTask<ProcessExitStatus> RunAsync(ProcessStartInfo, CancellationToken) referenceTask<ProcessExitStatus> RunAsync(string, IList<string>?, bool, CancellationToken) reference
int StartAndForget(ProcessStartInfo) referenceint StartAndForget(string, IList<string>?) referencebool TryGetProcessById(int, Process?) referenceNullabilityState GetNullability()NullabilityInfo GetNullabilityInfo()bool IsNullable()void EnsureCapacity<T>(int) reference
void TrimExcess<T>(int) reference
bool TryDequeue<T>(T) referencebool TryPeek<T>(T) referencestring GetHexString(int, bool) referencevoid GetHexString(Span<char>, bool) referenceT[] GetItems<T>(ReadOnlySpan<T>, int) referencevoid GetItems<T>(ReadOnlySpan<T>, Span<T>) referenceT[] GetItems<T>(T[], int) referencestring GetString(ReadOnlySpan<char>, int) referencevoid NextBytes(Span<byte>) referencelong NextInt64(long, long) referencelong NextInt64(long) referencelong NextInt64() referencefloat NextSingle() referencevoid Shuffle<T>(Span<T>) referencevoid Shuffle<T>(T[]) referenceShared referencevoid Fill(Span<byte>) referencebyte[] GetBytes(int) referencestring GetHexString(int, bool) referencevoid GetHexString(Span<char>, bool) referenceint GetInt32(int, int) referenceint GetInt32(int) referenceT[] GetItems<T>(ReadOnlySpan<T>, int) referencevoid GetItems<T>(ReadOnlySpan<T>, Span<T>) referencestring GetString(ReadOnlySpan<char>, int) referencevoid Shuffle<T>(Span<T>) referencebool EndsWith(string, StringComparison) referenceSpanLineEnumerator EnumerateLines() referenceint GetNormalizedLength(NormalizationForm) referencebool IsNormalized(NormalizationForm) referencebool SequenceEqual(string) referenceint Split(Span<Range>, char, StringSplitOptions) referenceint Split(Span<Range>, ReadOnlySpan<char>, StringSplitOptions) referenceint SplitAny(Span<Range>, ReadOnlySpan<char>, StringSplitOptions) referenceint SplitAny(Span<Range>, ReadOnlySpan<string>, StringSplitOptions) referencebool StartsWith(string, StringComparison) referencebool TryNormalize(Span<char>, int, NormalizationForm) referenceint CommonPrefixLength<T>(ReadOnlySpan<T>, IEqualityComparer<T>?) referenceint CommonPrefixLength<T>(ReadOnlySpan<T>) referencebool Contains<T>(T, IEqualityComparer<T>?) referencebool Contains<T>(T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T, T, T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T, T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T) where T : IEquatable<T> referencebool ContainsAnyExceptInRange<T>(T, T) where T : IComparable<T> referencebool ContainsAnyInRange<T>(T, T) where T : IComparable<T> referenceint CountAny<T>(ReadOnlySpan<T>, IEqualityComparer<T>?) referenceint CountAny<T>(ReadOnlySpan<T>) where T : IEquatable<T>? referenceint CountAny<T>(SearchValues<T>) where T : IEquatable<T>? referencebool EndsWith<T>(T) where T : IEquatable<T>? referenceint IndexOf<T>(T, IEqualityComparer<T>?) referenceint IndexOfAny<T>(ReadOnlySpan<T>, IEqualityComparer<T>?) referenceint IndexOfAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T, T, T) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T, T) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T, T, T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T, T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T) where T : IEquatable<T> referenceT? Max<T>(IComparer<T>?) referenceT? Max<T>() referenceT? Min<T>(IComparer<T>?) referenceT? Min<T>() referenceSpanSplitEnumerator<T> Split<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceSpanSplitEnumerator<T> Split<T>(T) where T : IEquatable<T> referenceSpanSplitEnumerator<T> SplitAny<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceSpanSplitEnumerator<T> SplitAny<T>(SearchValues<T>) where T : IEquatable<T> referencebool StartsWith<T>(T) where T : IEquatable<T>? referenceint Count(ReadOnlySpan<char>, int) referenceint Count(ReadOnlySpan<char>) referenceint Count(string) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>, int) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, int, int) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, int) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>) referencebool IsMatch(ReadOnlySpan<char>, int) referencebool IsMatch(ReadOnlySpan<char>) referenceint Count(ReadOnlySpan<char>, string, RegexOptions, TimeSpan) referenceint Count(ReadOnlySpan<char>, string, RegexOptions) referenceint Count(ReadOnlySpan<char>, string) referenceint Count(string, string, RegexOptions, TimeSpan) referenceint Count(string, string, RegexOptions) referenceint Count(string, string) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>, string, RegexOptions, TimeSpan) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>, string, RegexOptions) referenceValueMatchEnumerator EnumerateMatches(ReadOnlySpan<char>, string) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, string, RegexOptions, TimeSpan) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, string, RegexOptions) referenceValueSplitEnumerator EnumerateSplits(ReadOnlySpan<char>, string) referencebool IsMatch(ReadOnlySpan<char>, string, RegexOptions, TimeSpan) referencebool IsMatch(ReadOnlySpan<char>, string, RegexOptions) referencebool IsMatch(ReadOnlySpan<char>, string) referenceIsMultithreadingSupported referencebool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, sbyte) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, sbyte) referencebool TryParse(ReadOnlySpan<byte>, sbyte) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, sbyte) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, sbyte) referencebool TryParse(ReadOnlySpan<char>, sbyte) referencebool TryParse(string?, IFormatProvider?, sbyte) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referencebyte[] HashData(byte[]) referenceint HashData(ReadOnlySpan<byte>, Span<byte>) referencebyte[] HashData(ReadOnlySpan<byte>) referenceint HashData(Stream, Span<byte>) referencebyte[] HashData(Stream) referenceValueTask<byte[]> HashDataAsync(Stream, CancellationToken) referenceValueTask<int> HashDataAsync(Stream, Memory<byte>, CancellationToken) referencebool TryHashData(ReadOnlySpan<byte>, Span<byte>, int) referenceint SingleToInt32Bits(float)uint SingleToUInt32Bits(float)bool TryFormat(Span<byte>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryFormat(Span<char>, int, ReadOnlySpan<char>, IFormatProvider?) referencebool TryParse(ReadOnlySpan<byte>, float) referencebool TryParse(ReadOnlySpan<byte>, IFormatProvider?, float) referencebool TryParse(ReadOnlySpan<byte>, NumberStyles, IFormatProvider?, float) referencebool TryParse(ReadOnlySpan<char>, float) referencebool TryParse(ReadOnlySpan<char>, IFormatProvider?, float) referencebool TryParse(ReadOnlySpan<char>, NumberStyles, IFormatProvider?, float) referencebool TryParse(string?, IFormatProvider?, float) referenceValueTask ConnectAsync(EndPoint, CancellationToken) referenceValueTask DisconnectAsync(bool, CancellationToken) referenceValueTask<SocketReceiveFromResult> ReceiveFromAsync(Memory<byte>, SocketFlags, EndPoint, CancellationToken) referenceValueTask<int> SendToAsync(ReadOnlyMemory<byte>, SocketFlags, EndPoint, CancellationToken) referencebool EndsWith(string) referenceSpanLineEnumerator EnumerateLines() referencebool SequenceEqual(string) referencebool StartsWith(string) referenceSpan<char> TrimEnd() referenceSpan<char> TrimStart() referenceint CommonPrefixLength<T>(ReadOnlySpan<T>, IEqualityComparer<T>?) referenceint CommonPrefixLength<T>(ReadOnlySpan<T>) referencebool Contains<T>(T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T, T, T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T, T) where T : IEquatable<T> referencebool ContainsAnyExcept<T>(T) where T : IEquatable<T> referencebool ContainsAnyExceptInRange<T>(T, T) where T : IComparable<T> referencebool ContainsAnyInRange<T>(T, T) where T : IComparable<T> referenceint IndexOfAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T, T, T) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T, T) where T : IEquatable<T> referenceint IndexOfAnyExcept<T>(T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(ReadOnlySpan<T>) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T, T, T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T, T) where T : IEquatable<T> referenceint LastIndexOfAnyExcept<T>(T) where T : IEquatable<T> referencevoid Sort<T>(Comparison<T>)void Sort<T>() where T : IComparable<T> referencevoid Sort<TKey, TValue, TComparer>(Span<TValue>, TComparer) where TComparer : IComparer<TKey> referencevoid Sort<TKey, TValue>(Span<TValue>, Comparison<TKey>) referencevoid Sort<TKey, TValue>(Span<TValue>) referencevoid EnsureCapacity<T>(int) reference
void TrimExcess<T>(int) reference
bool TryPeek<T>(T) referencebool TryPop<T>(T) referenceTask CopyToAsync(Stream, CancellationToken) referenceValueTask DisposeAsync() referenceint Read(Span<byte>) referenceValueTask<int> ReadAsync(Memory<byte>, CancellationToken) referenceint ReadAtLeast(Span<byte>, int, bool) referenceValueTask<int> ReadAtLeastAsync(Memory<byte>, int, bool, CancellationToken) referencevoid ReadExactly(byte[], int, int) referencevoid ReadExactly(Span<byte>) referenceValueTask ReadExactlyAsync(byte[], int, int, CancellationToken) referenceValueTask ReadExactlyAsync(Memory<byte>, CancellationToken) referencevoid Write(ReadOnlySpan<byte>) referenceValueTask WriteAsync(ReadOnlyMemory<byte>, CancellationToken) referencebool Contains(char, StringComparison) referencebool Contains(char) referencebool Contains(string, StringComparison) referencevoid CopyTo(Span<char>) referencebool EndsWith(char, StringComparison) referencebool EndsWith(char) referenceint GetHashCode(StringComparison) referenceint IndexOf(char, int, int, StringComparison) referenceint IndexOf(char, int, StringComparison) referenceint IndexOf(char, StringComparison) referenceint LastIndexOf(char, int, int, StringComparison) referenceint LastIndexOf(char, int, StringComparison) referenceint LastIndexOf(char, StringComparison) referencestring ReplaceLineEndings(string) referencestring ReplaceLineEndings() referencestring[] Split(char, int, StringSplitOptions) referencestring[] Split(char, StringSplitOptions) referencestring[] Split(string, int, StringSplitOptions) referencestring[] Split(string, StringSplitOptions) referencebool StartsWith(char, StringComparison) referencebool StartsWith(char) referencebool TryCopyTo(Span<char>) referencestring Concat(ReadOnlySpan<object?>) referencestring Concat(ReadOnlySpan<string?>) referencestring Create<TState>(int, TState, System.Buffers.SpanAction<char, TState>) referenceint GetHashCode(ReadOnlySpan<char>, StringComparison) referenceint GetHashCode(ReadOnlySpan<char>) referencestring Join(char, object?[]) referencestring Join(char, ReadOnlySpan<object?>) referencestring Join(char, ReadOnlySpan<string?>) referencestring Join(char, string?[], int, int) referencestring Join(char, string?[]) referencestring Join(string?, ReadOnlySpan<object?>) referencestring Join(string?, ReadOnlySpan<string?>) referencestring Join<T>(char, IEnumerable<T>) referenceTruncated — view the full README on GitHub.
(top 30 of 38)
C#
100.0%