Some MemoryMarshal methods are source incompatible in .NET11
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 75/100
- Type d'issue
- Documentation
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- csharp
- Domaine
- documentation
Piste de recherche
Commencez par lire le changement de priorité des surcharges dans PR #126252 et les conventions de documentation de .NET Runtime concernant les notes de compatibilité du code source. Documentez le fait que les méthodes de readonly struct qui transmettent this aux surcharges de MemoryMarshal concernées peuvent ne pas compiler, et incluez l’exemple ou les solutions de contournement de l’issue. Le travail est terminé lorsque la rupture de compatibilité et sa portée sont formellement documentées.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
#126252 added [OverloadResolutionPriority(1)] to several methods in System.Runtime.InteropServices.MemoryMarshal to prefer Span<T> over ReadOnlySpan<T>. This change fixed source incompatibility for a larger issue, but at the expense of source compatibility for edge cases.
One such example is attempting to use these methods by passing this inside an instance method of a struct that has implicit conversions to both Span<T> and ReadOnlySpan<T> when the method is marked readonly.
This change should be formally documented to acknowledge that such code patterns will now fail to compile.
Minimum example
[InlineArray(8)]
public struct CoolInlineArray {
byte data;
// Works in .NET10 - chooses ReadOnlySpan<T> overload
// Fails in .NET11 - chooses Span<T> overload
internal readonly ulong GetLongA() => MemoryMarshal.Cast<byte, ulong>(this)[0];
// Works in .NET10
// Works in .NET11
internal ulong GetLongB() => MemoryMarshal.Cast<byte, ulong>(this)[0];
}
Workarounds
This pattern is likely incredibly rare, and easily addressed:
- Explicitly cast
thistoReadOnlySpan<T> - Remove
readonlyfrom the method (potentially undesirable for performance reasons)
- Langage dominant
- C#
- Étoiles
- 18.4k
- Forks
- 5.8k
- Merge moyen
- 2 j 19 h
- PR mergées (30 j)
- 590
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de dotnet/runtime
-
area-Setup untriaged
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
dotnet/runtime#137376 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
ImmutableSortedSet<T>.Builder: enumerating through IEnumerable<T> doesn't throw on modification and can return wrong itemsPeut-être pris @aw0lid l’a pris il y a 3 jours. Ouvertearea-System.Collections
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
dotnet/runtime#137167 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
DbTransaction.SupportsSavepoints docs say Release/ReleaseAsync are expected to throw, but they are no-ops by designPeut-être pris @alaricd l’a pris il y a 7 jours. Ouvertearea-System.Transactions untriaged
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
dotnet/runtime#137040 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
FileSystemGlobbing: Matcher throws ArgumentOutOfRangeException when the rootDir is the same value as the filePeut-être pris @makazeu l’a pris il y a 7 jours. Ouvertearea-Extensions-FileSystem
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
dotnet/runtime#136989 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Configuration binder source generator emits unqualified List<T> when binding arrays without implicit usingsPeut-être pris @makazeu l’a pris il y a 7 jours. Ouvertearea-Extensions-Configuration bug source-generator
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
dotnet/runtime#136972 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de dotnet/runtime
Issues similaires
-
bug emitter:client:csharp
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
microsoft/typespec#12572 · 1 commentaire · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
needs-area-label
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 2 jours
-
AWS Lambda: KeyNotFoundException drops HTTP-triggered transactions when allowAllHeaders is disabledOuvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
newrelic/newrelic-dotnet-agent#3949 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
area-networking
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
dotnet/aspnetcore#70545 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 87/100
Les mainteneurs répondent en général sous 1 jour