Aracılığıyla paylaş


Satır içi dizi bildirimleriyle hataları ve uyarıları düzeltme

Bu makale aşağıdaki derleyici hatalarını ve uyarılarını kapsar:

  • CS9125: 'SizeConst' öznitelik parametresi belirtilmelidir.
  • CS9164: Atanabilir bir değişken olmadığından ifade Span<T> dönüştürülemiyor
  • CS9165: başvuru tarafından geçirilemediği veya döndürülemediğinden ReadOnlySpan<T> ifade dönüştürülemiyor
  • CS9166: Dizin satır içi dizinin sınırlarının dışında
  • CS9167: Satır içi dizi uzunluğu 0'dan büyük olmalıdır.
  • CS9168: Satır içi dizi yapısı açık bir düzene sahip olmamalıdır.
  • CS9169: Satır içi dizi yapısı, başvuru alanı olmaması gereken bir ve yalnızca bir örnek alanı bildirmelidir.
  • CS9172: Satır içi dizi türünün öğelerine yalnızca , intveya System.Indexöğesine örtük olarak dönüştürülebilen System.Rangetek bir bağımsız değişkenle erişilebilir.
  • CS9173: Satır içi dizi erişiminin adlandırılmış bağımsız değişken tanımlayıcısı olmayabilir
  • CS9180: Satır içi dizi öğesi alanı gerekli, salt okunur, geçici veya sabit boyutlu bir arabellek olarak bildirilemez.
  • CS9181: Satır içi dizi dizin oluşturucu, öğe erişim ifadesi için kullanılmaz.
  • CS9182: Satır içi dizi 'Slice' yöntemi, öğe erişim ifadesi için kullanılmaz.
  • CS9183: Satır içi dizi dönüştürme işleci, bildirim türü ifadesinden dönüştürme için kullanılmaz.
  • CS9184: 'Satır içi diziler' dil özelliği, öğe alanı 'ref' alanı olan veya tür bağımsız değişkeni olarak geçerli olmayan türe sahip satır içi dizi türleri için desteklenmez.
  • CS9189: foreach türdeki satır içi dizideki deyim desteklenmiyor
  • CS9259: Öznitelik System.Runtime.CompilerServices.InlineArrayAttribute bir kayıt yapısına uygulanamaz.

Satır içi dizi bildirimi

Satır içi dizileri tek bir alana sahip bir struct tür ve dizinin uzunluğunu belirten bir öznitelik olarak bildirirsiniz. Derleyici geçersiz satır içi dizi bildirimleri için aşağıdaki hataları oluşturur:

  • CS9125: 'SizeConst' öznitelik parametresi belirtilmelidir.
  • CS9167: Satır içi dizi uzunluğu 0'dan büyük olmalıdır.
  • CS9168: Satır içi dizi yapısı açık bir düzene sahip olmamalıdır.
  • CS9169: Satır içi dizi yapısı, başvuru alanı olmaması gereken bir ve yalnızca bir örnek alanı bildirmelidir.
  • CS9180: Satır içi dizi öğesi alanı gerekli, salt okunur, geçici veya sabit boyutlu bir arabellek olarak bildirilemez.
  • CS9184: 'Satır içi diziler' dil özelliği, öğe alanı 'ref' alanı olan veya tür bağımsız değişkeni olarak geçerli olmayan türe sahip satır içi dizi türleri için desteklenmez.
  • CS9259: Öznitelik System.Runtime.CompilerServices.InlineArrayAttribute bir kayıt yapısına uygulanamaz.

Bu dizileri düzeltmek için aşağıdakilerin doğru olduğundan emin olun:

  • bağımsız değişkeni System.Runtime.CompilerServices.InlineArrayAttribute pozitif bir tamsayıdır.
  • Kapsayan struct herhangi bir açık düzen belirtmez.
  • Kapsayan struct tek bir örnek alanı vardır ve bu örnek alanı bir ref alan değildir.
  • Tek örnek alanı sabit boyutlu bir arabellek değildir.
  • Tek örnek alanı , requiredveya volatile değiştiricilerini içermezreadonly.
  • Değiştiriciyi record satır içi dizi bildiriminizden kaldırın.

Öğe erişimi

Satır içi dizinin öğelerine herhangi bir diziyle aynı şekilde erişirsiniz. Derleyici yanlış öğe erişiminden aşağıdaki hataları yayar:

  • CS9166: Dizin satır içi dizinin sınırlarının dışında
  • CS9172: Satır içi dizi türünün öğelerine yalnızca , intveya System.Indexöğesine örtük olarak dönüştürülebilen System.Rangetek bir bağımsız değişkenle erişilebilir.
  • CS9173: Satır içi dizi erişiminin adlandırılmış bağımsız değişken tanımlayıcısı olmayabilir
  • CS9189: foreach türdeki satır içi dizideki deyim desteklenmiyor

Ayrıca, bir dizin oluşturucu bildirdiğinizde derleyici aşağıdaki uyarıyı döndürür:

  • CS9181: Satır içi dizi dizin oluşturucu, öğe erişim ifadesi için kullanılmaz.

Satır içi arabelleğe yönelik oluşturulan kod, bildirilen dizin oluşturucuları atlayarak arabellek belleğine doğrudan erişir. Satır içi diziler deyimiyle foreach kullanılamaz.

Dizin oluşturucunun bağımsız değişkeni şu olmalıdır:

  • Şu üç türden biri: int, a System.Index veya .System.Range
  • Adlandırılmış bağımsız değişken olamaz. Derleyici, öğe erişimcisini oluşturur. Parametresinin bir adı olmadığından adlandırılmış bağımsız değişkenleri kullanamazsınız.
  • Dizinin sınırlarına eklenir. Tüm .NET dizilerinde olduğu gibi, satır içi dizi öğesi erişimi de sınırlar denetlenir. Dizin, satır içi dizinin sınırları içinde olmalıdır.

Span'a Dönüştürmeler

Genellikle satır içi dizilerle çalışmak için veya System.Span<T> kullanırsınızSystem.ReadOnlySpan<T>. Derleyici geçersiz dönüştürmeler için aşağıdaki hataları oluşturur:

  • CS9164: Atanabilir bir değişken olmadığından ifade Span<T> dönüştürülemiyor
  • CS9165: başvuru tarafından geçirilemediği veya döndürülemediğinden ReadOnlySpan<T> ifade dönüştürülemiyor

Derleyici, satır içi arabelleğe doğrudan erişen kod oluşturur. Bu nedenle, bazı üyeler asla çağrılmaz. Derleyici, hiç çağrılmadan üyelerden birini yazarsanız aşağıdaki uyarıları oluşturur:

  • CS9182: Satır içi dizi 'Slice' yöntemi, öğe erişim ifadesi için kullanılmaz.
  • CS9183: Satır içi dizi dönüştürme işleci, bildirim türü ifadesinden dönüştürme için kullanılmaz.

Satır içi dizi, yöntemlere satır içi dizi geçirmek için örtük olarak veya'ya Span<T>ReadOnlySpan<T> dönüştürülebilir. Derleyici, bu dönüştürmelerde kısıtlamalar uygular:

  • Satır içi diziyi değerine dönüştürmek için satır içi dizinin Span<T>yazılabilir olması gerekir. Dizi salt okunursa, yazılabilir Span<T>bir öğesine dönüştüremezsiniz. Bunun yerine kullanabilirsiniz ReadOnlySpan<T> .
  • Satır içi dizinin güvenli bağlamı, dönüştürmenin başarılı olması için en az veya'ın Span<T> güvenli bağlamıReadOnlySpan<T>geniş olmalıdır. Yayılma alanının bağlamını sınırlamanız veya satır içi dizinin kapsamını genişletmeniz gerekir.

Ayrıca, derleyici hiçbir zaman satır içi arabellekteki bir Slice yönteme çağrı oluşturmaz. Satır içi arabelleği veya'na Span dönüştürmek için ReadOnlySpan dönüştürme işleçleri çağrılmaz. Derleyici, doğrudan bellek arabelleğinden veya System.Span<T>System.ReadOnlySpan<T> oluşturmak için kod oluşturur.