29736Fermer29738
WarptenLe 20/12/2016 à 01:24
private void Load(BinaryReader reader) { //! NEVER EVER CHANGE THIS TO VAR. // ReSharper disable once SuggestVarOrType_Elsewhere M2Array<int>[] timelineEntries = ReadArrayOf(reader, ref mFileBlock.Timestamps); mTimestamps = new int[timelineEntries.Length][]; for (var i = 0; i < timelineEntries.Length; ++i) mTimestamps[i] = ReadArrayOf(reader, ref timelineEntries[i]); var valuesEntries = ReadArrayOf(reader, ref mFileBlock.Values); mValues = new TSource[valuesEntries.Length][]; for (var i = 0; i < valuesEntries.Length; ++i) mValues[i] = ReadArrayOf(reader, ref valuesEntries[i]); }
Petit « bug » sympa dans la détection de type de Roslyn mFileBlock.Timestamps est de type M2Array<M2Array<int>>.
C'est en gros une façon d'addresser les tableaux dans un fichier (merci bli2), ça revient à { int count; int offset; }
ReadArrayOf est signée comme telle: T[] ReadArrayOf<T>(BinaryReader reader, ref M2Array<T> arr)
Du coup, pour une raison quelconque, si je déclare timelineEntries comme var, Roslyn est incapable de déterminer que le type de timelineEntries[i] est M2Array<int>, et me sort donc une jolie erreur.

Dans le cas de mFileBlock.Values, cette propriété est de type M2Array<Vector3>, où le Vector3 (soit T) est partagé avec la déclaraction de la classe.

GoldenCrystal a été invité sur ce sujet.


Une idée?