Aracılığıyla paylaş


Başvuru parametreleri, değişkenler ve dönüşlerle ilişkili hatalar ve uyarılar

Başvuru değişkenleriyle çalışırken aşağıdaki hatalar oluşturulabilir:

  • CS0192: Alan readonly veya ref değeri olarak out kullanılamaz (oluşturucu dışında)
  • CS0199: Alan static readonly veya refout değeri olarak kullanılamaz (statik oluşturucu dışında)
  • CS0206: Başvuru döndürücü olmayan bir özellik veya dizin oluşturucu veya out değer ref olarak kullanılamayabilir
  • CS0631: ref ve out bu bağlamda geçerli değildir
  • CS0767: Yöntemin yalnızca ref ve üzerinde farklı aşırı yüklemeler içermesine neden olduğundan belirtilen tür parametrelerine sahip arabirim devralılamıyor out
  • CS1510: A ref veya out değeri atanabilir bir değişken olmalıdır
  • CS1605: Salt okunur olduğundan değişken veya ref değer olarak out kullanılamaz
  • CS1623: Yineleyicilerde , ref veya in parametreleri olamaz out
  • CS1649: Bir readonly alanın üyeleri veya ref değeri olarak out kullanılamaz (oluşturucu dışında)
  • CS1651: Statik salt okunur alanın alanları veya ref değeri olarak out kullanılamaz (statik oluşturucu dışında)
  • CS1655: Veya ref değeri olarak out tür alanları kullanılamaz
  • CS1657: Değişken veya ref değeri olarak out kullanılamaz
  • CS1741: Bir ref veya out parametresi varsayılan değere sahip olamaz
  • CS1939: Aralık değişkeni veya outref parametresi olarak geçirilemiyor
  • CS1988: Zaman uyumsuz yöntemlerin refveya inout parametreleri olamaz
  • CS7084: Windows Çalışma Zamanı olayı veya out parametresi olarak ref geçirilmeyebilir.
  • CS8196: Örtük olarak yazılan bir değişkene başvuruya aynı bağımsız değişken listesinde izin verilmez.
  • CS8325: 'await' koşullu işleç içeren bir ref ifadede kullanılamaz
  • CS8326: Her iki koşullu işleç değeri de başvuru değeri olmalıdır veya ikisi de başvuru değeri olmayabilir
  • CS8327: İfadenin alternatif başvuru değeriyle eşleşmesi için doğru türde olması gerekir
  • CS8329: Salt okunur bir ref değişken olduğundan değişken veya out değer olarak kullanılamaz
  • CS8330: Salt okunur bir ref değişken olduğundan değişkenin üyeleri veya out değeri olarak kullanılamaz
  • CS8331: Salt okunur bir ref değişken olduğundan değişken atanamaz veya atamanın sağ tarafı olarak kullanılamaz
  • CS8332: Salt okunur bir değişken olduğundan değişkenin bir üyesine atanamaz veya atamanın ref sağ tarafı olarak kullanılamaz
  • CS8337: 'ref' uzantı yönteminin ilk parametresi bir değer türü veya yapıyla kısıtlanmış genel bir tür olmalıdır.
  • CS8338: Uzantı yönteminin ilk 'in' veya 'ref readonly' parametresi somut (genel olmayan) bir değer türü olmalıdır.
  • CS8373: Atamanın ref sol tarafı bir başvuru değişkeni olmalıdır.
  • CS8388: Değişken out , başvuru yerel olarak bildirilemez
  • CS8977: 'refinUnmanagedCallersOnly' ile ilişkilendirilen bir yöntemin imzasında '', '' veyaout '' kullanılamaz.
  • CS8986: Parametrenin 'kapsamlı' değiştiricisi hedefle eşleşmiyor.
  • CS8987: Parametrenin 'scoped' değiştiricisi, geçersiz kılınan veya uygulanan üyeyle uyuşmuyor.
  • CS9061: 'kapsamlı' değiştirici atma ile kullanılamaz.
  • CS9062: Türler ve diğer adlar 'scoped' olarak adlandırılamaz.
  • CS9063: UnscopedRefAttribute, varsayılan olarak kapsamı kaldırıldığı için bu parametreye uygulanamaz.
  • CS9065: 'System.Runtime.CompilerServices.ScopedRefAttribute' kullanmayın. Bunun yerine 'scoped' anahtar sözcüğünü kullanın.
  • CS9066: UnscopedRefAttribute, 'kapsamlı' değiştiricisi olan parametrelere uygulanamaz.
  • CS9072: Bir derleme değişkeni, yerel başvuru olarak bildirilemez
  • CS9101: UnscopedRefAttribute yalnızca yapı veya sanal arabirim örneği yöntemlerine ve özelliklerine uygulanabilir ve oluşturuculara veya yalnızca yerleşik üyelere uygulanamaz.
  • CS9102: Uygulanan üyenin bu özniteliği olmadığından UnscopedRefAttribute bir arabirim uygulamasına uygulanamaz.
  • CS9104: using Türünde bir deyim kaynağı zaman uyumsuz yöntemlerde veya zaman uyumsuz lambda ifadelerinde kullanılamaz.
  • CS9190: readonly değiştirici sonra refbelirtilmelidir.
  • CS9199: Bir ref readonly parametre out özniteliğine sahip olamaz.

Başvuru değişkenleri yanlış kullanıldığında aşağıdaki uyarılar oluşturulur:

  • CS9073: Parametrenin 'kapsamlı' değiştiricisi hedefle eşleşmiyor.
  • CS9074: Parametrenin 'kapsamlı' değiştiricisi geçersiz kılınan veya uygulanan üyeyle eşleşmiyor.
  • CS9191: ref Parametresine in karşılık gelen bağımsız değişkenin değiştiricisi ile ineşdeğerdir. Bunun yerine kullanmayı in göz önünde bulundurun.
  • CS9192: Bağımsız değişken veya ref anahtar sözcüğüyle in geçirilmelidir.
  • CS9193: Bağımsız değişken bir parametreye geçirildiğinden değişken ref readonly olmalıdır
  • CS9195: Bağımsız değişken anahtar sözcüğüyle in geçirilmelidir
  • CS9196: Parametrenin başvuru türü değiştiricisi geçersiz kılınmış veya uygulanan üyede karşılık gelen parametreyle eşleşmiyor.
  • CS9197: Parametrenin başvuru türü değiştiricisi, gizli üyedeki ilgili parametreyle eşleşmiyor.
  • CS9198: Parametrenin başvuru türü değiştiricisi hedefteki ilgili parametreyle eşleşmiyor.
  • CS9200: Parametre için ref readonly varsayılan bir değer belirtilir, ancak ref readonly yalnızca başvurular için kullanılmalıdır. parametresini olarak inbildirmeyi göz önünde bulundurun.
  • CS9201: Başvuru alanı kullanımdan önce başvuru olarak atanmalıdır.
  • CS9265: Alan hiçbir zaman başvuruya atanmamıştır ve her zaman varsayılan değerine (null başvurusu) sahip olur

Bu hatalar ve uyarılar şu temalara uyar:

  • Yanlış söz dizimi: Bildiriminizin veya kullanımınızın söz dizimi geçersiz.
  • ref olmadığı dil yapıları: Bazı C# deyimleri değişkenlere izin vermez. Bunun nedeni genellikle başvuru güvenliği analizinin güvenilir bir şekilde yapılamadığıdır.
  • Başvuru değişkeninin gerekli olduğu yerde kullanılan değer ifadesi: Başvuru değişkeni olarak kullanılan ifade değer ifadesi değil değişken olmalıdır.
  • Salt okunur değişkenlere başvuran yazılabilir başvuru değişkenleri: Salt okunur bir değişkene başvuru yazılabilir başvuru tarafından geçirilemez.

Bu makalede, , , inveya değiştiricilerinden biriyle ref readonlyya da yerel değişken, içindeki bir alan refoutveya ref bir dönüşle bildirilen bir ref parametre için genel terim olarak başvuru değişkeni ref structrefkullanılır. Başvuru değişkeni, başvuran olarak adlandırılan başka bir değişkene başvurur.

Hatalı söz dizimi

Bu hatalar, başvuru değişkenleriyle ilgili yanlış söz dizimi kullandığınızı gösterir:

  • CS8373: Atamanın ref sol tarafı bir başvuru değişkeni olmalıdır.
  • CS8388: Değişken out , başvuru yerel olarak bildirilemez.
  • CS9190: readonly değiştirici sonra refbelirtilmelidir.

Bu hataları düzeltmek için:

  • Bir = ref işlecin sol işleneninin bir değer ifade veya başvuru olmayan yerel değişken yerine bir başvuru değişkeni olduğundan emin olun. Ref ataması, her iki tarafın da aynı depolama konumuna (CS8373) bir alias oluşturabilen ref değişkenleri olmasını gerektirir.
  • Başvuru parametrelerini bildirirken, değiştiriciyi ref readonly yerine readonly ref olarak yazın. C# dil belirtimi, tüm başvuru parametre türlerinde tutarlı bir söz dizimini korumak için, parametre bildirimlerinde ref değiştiricisinden önce readonly anahtar sözcüğünün bulunmasını gerektirir (CS9190).
  • ref Yerel başvuru değişkenlerini bildirirken yerine out anahtar sözcüğünü kullanın. out yalnızca bir yöntemin döndürmeden önce bir değer ataması gerektiğini belirten bir parametre değiştiricidir, ancak ref diğer depolama konumlarını (CS8388) diğer adla kullanan yerel değişkenler oluşturmak için uygun anahtar sözcüktür. Başvuru değişkenleri ve söz dizimi gereksinimleri hakkında daha fazla bilgi için bkz. başvuru değişkenleri ve C# Dil Belirtimi.

Başvuru değişkeni kısıtlamaları

Aşağıdaki hatalar, bir başvuru değişkeninin bir başvuru değişkeniniz olduğu yerde kullanılamadığını gösterir:

  • CS0631: ref ve out bu bağlamda geçerli değildir
  • CS0767: Yöntemin yalnızca ref ve üzerinde farklı aşırı yüklemeler içermesine neden olduğundan belirtilen tür parametrelerine sahip arabirim devralılamıyor out
  • CS1623: Yineleyicilerde , ref veya in parametreleri olamaz out
  • CS1741: Bir ref veya out parametresi varsayılan değere sahip olamaz
  • CS1939: Aralık değişkeni veya outref parametresi olarak geçirilemiyor
  • CS1988: Zaman uyumsuz yöntemlerin refveya inout parametreleri olamaz
  • CS7084: Windows Çalışma Zamanı olayı veya out parametresi olarak ref geçirilmeyebilir.
  • CS8196: Örtük olarak türü belirlenmiş out bir değişkene başvuruya aynı bağımsız değişken listesinde izin verilmez.
  • CS8325: 'await' koşullu işleç içeren bir ref ifadede kullanılamaz
  • CS8326: Her iki koşullu işleç değeri de başvuru değeri olmalıdır veya ikisi de başvuru değeri olmayabilir
  • CS8327: İfadenin alternatif başvuru değeriyle eşleşmesi için doğru türde olması gerekir
  • CS8337: 'ref' uzantı yönteminin ilk parametresi bir değer türü veya yapıyla kısıtlanmış genel bir tür olmalıdır.
  • CS8338: Uzantı yönteminin ilk 'in' veya 'ref readonly' parametresi somut (genel olmayan) bir değer türü olmalıdır.
  • CS8977: 'refinUnmanagedCallersOnly' ile ilişkilendirilen bir yöntemin imzasında '', '' veyaout '' kullanılamaz.
  • CS9072: Bir derleme değişkeni, yerel başvuru olarak bildirilemez
  • CS9104: using Türünde bir deyim kaynağı zaman uyumsuz yöntemlerde veya zaman uyumsuz lambda ifadelerinde kullanılamaz.
  • CS9199: Bir ref readonly parametre out özniteliğine sahip olamaz.

Aşağıdaki uyarılar bir başvuru değişkeninin kullanılmaması gerektiğini ve güvenli olmayabileceğini gösterir:

  • CS9196: Parametrenin başvuru türü değiştiricisi geçersiz kılınmış veya uygulanan üyede karşılık gelen parametreyle eşleşmiyor.
  • CS9197: Parametrenin başvuru türü değiştiricisi, gizli üyedeki ilgili parametreyle eşleşmiyor.
  • CS9198: Parametrenin başvuru türü değiştiricisi hedefteki ilgili parametreyle eşleşmiyor.
  • CS9200: Parametre için ref readonly varsayılan bir değer belirtilir, ancak ref readonly yalnızca başvurular için kullanılmalıdır. parametresini olarak inbildirmeyi göz önünde bulundurun.
  • CS9201: Başvuru alanı kullanımdan önce başvuru olarak atanmalıdır.
  • CS9265: Alan hiçbir zaman başvuruya atanmamıştır ve her zaman varsayılan değerine (null başvurusu) sahip olur

Bu hataları düzeltmek için:

  • Dizin oluşturuculardan başvuru parametrelerini kaldırın. İndeksleyiciler, dizi benzeri erişim söz dizimi sağlamak için tasarlanmıştır ve derleyici, indeksleyici erişimcileri (CS0631, CS1623) aracılığıyla aktarılan referansların güvenli yaşam süresini izlemeyi garanti edemez.
  • Yineleyici yöntemlerinden başvuru parametrelerini kaldırın. Yineleyiciler, durum makinelerini kullanarak birden çok çağrıda kodu gizli olarak yürütür ve derleyici, yürütmenin askıya alındığı ve sürdürüldüğü verim dönüş sınırları boyunca başvuruda bulunılan değişkenlerin geçerli kalmasını sağlayamaz (CS1623).
  • Asenkron yöntemlerden başvuru parametrelerini kaldırın. Zaman uyumsuz yöntemler, bekleme noktalarında yürütmeyi askıya alabilir ve farklı iş parçacıklarında sürdürebilir, bu da başvuruda bulunılan değişkenlerin yöntemin yürütülmesi (CS1988) boyunca geçerli ve erişilebilir kalmasını garanti etmek mümkün değildir.
  • Await ifadelerini ref koşullu ifadeler içinde kullanmaktan kaçının. Await işlemi, koşullu operatör aracılığıyla seçilen referansları geçersiz kılarak işlemin yürütülmesini askıya alabilir ve yürütme devam ettiğinde geçersiz kılınmış referansların olası kullanımına neden olabilir (CS8325).
  • Ref koşullu operatörün her iki dalının da referans döndürdüğünden veya hiçbirinin de referans döndürmediğinden ve her ikisi de referans olduğunda aynı türde olmaları gerektiğinden emin olun. Koşullu işleç, hangi dal seçildiğinden bağımsız olarak çağıran kod tarafından güvenli bir şekilde kullanılabilecek tutarlı bir sonuç türü üretmelidir (CS8326, CS8327).
  • ref ve out parametrelerinden varsayılan değerleri kaldırın. Parametre ile var olan bir değişken arasında gerekli diğer ad ilişkisini kurmak ve varsayılan değerleri anlamsal olarak anlamsız hale getirmek için başvuru parametreleri her zaman çağrı sitesinde sağlanmalıdır (CS1741).
  • Aynı değişkene de başvuran bağımsız değişken listesinde örtük olarak yazılan out bir değişken bildirmekten kaçının. Derleyici, aynı ifade içindeki değişkenin kullanımlarını eşzamanlı olarak doğrulayarak döngüsel bağımlılık (CS8196) oluştururken değişkenin türünü yöntem imzasından çıkarmalıdır.
  • LINQ sorgu aralığı değişkenlerini başvuru parametresi olarak geçirmeyin. Aralık değişkenleri, ömrü sorgu yürütme modeli tarafından yönetilen ve güvenli bir şekilde başvurulabilen kararlı bellek konumlarına sahip olmayan derleyici tarafından oluşturulan yineleme değişkenleridir (CS1939).
  • Nesneleri oluştururken başvuru yerel değerleri yerine normal değer değişkenlerini kullanın. Yapı bozma, yapı bozulan değerleri almak için yeni değişkenler oluşturur ve referans değişkenleri bu geçici değerleri bağımsız olarak depolamak yerine bu değerlere diğer adlar vermeyi dener (CS9072).
  • Parametrelerdeki ref ve out değiştiricilerine göre farklılık gösteren yöntemlere sahip birden çok arabirimi uygulamaktan kaçının. C# dilinin spesifikasyonu, bunları farklı imzalar olarak ele alır, ancak hem ref hem de out uygulama sınırlarında aynı çağrı söz dizimini paylaştıkları için hangi uygulamanın çağrılacağını ayırt edecek bir yol sağlamaz (CS0767).
  • ile System.Runtime.InteropServices.UnmanagedCallersOnlyAttributedekore edilmiş yöntemlerden başvuru parametrelerini kaldırın. Bu yöntemler, C# başvuru güvenlik kurallarını anlamayan yönetilmeyen koddan çağrılır ve yönetilen/yönetilmeyen sınır (CS8977) genelinde başvurulan değişkenlerin uygun yaşam süresi yönetimini garanti etmez.
  • ref değiştiricisini yalnızca uzantı yönteminin ilk parametrelerinde, değer türleri veya değer türleriyle kısıtlanmış genel türler için kullanın. Başvuru türleri CLR düzeyinde zaten başvuruyla geçmektedir ve ref eklemek, bir başvuruya referans oluşturur; ref ile yapılan değer türü uzantıları ise genişletilmiş örneğin mutasyonunu sağlar (CS8337, CS8338).
  • Windows Çalışma Zamanı olaylarını başvuru parametresi olarak geçirmeyin. Bu olaylar, .NET referanslarından farklı ömür döngüsü ve iş parçacığı yönetimi semantiğine sahip olan ve C# başvuru parametrelerinin (CS7084) gerektirdiği takma adlama davranışını desteklemeyen Windows Çalışma Zamanı tür sistemiyle uyumludur.
  • parametrelerinden System.Runtime.InteropServices.OutAttribute'yı ref readonly kaldırın. Bu öznitelik, parametre yönünün yalnızca giden olduğu platform çağırma senaryolarında semantiği sıralamak için tasarlanmıştır ve bu senaryolar, parametrenin yeniden atanamayacak mevcut verilere başvurduğu garantisiyle (ref readonly) çakışır.
  • Bir türdeki tüm ref alanların, oluşturucu tamamlanmadan önce alan başlatıcılarda veya tüm oluşturucu kod yollarında atandığından emin olun. Başlatılmamış başvuru alanları, erişilirse bellek bozulmasına neden olabilecek geçersiz başvurular içerebilir (CS9201, CS9265).
  • Geçersiz kılınan temel metot veya uygulanan arayüz metot ile bir metot arasındaki başvuru türü değiştiricilerini (ref, in, out, ref readonly) eşleştirin. Referans değiştirici, türetilmiş türlerin yedeklenebilirlik ve çağıranların beklentilerini (CS9196, CS9197, CS9198) korumak için yerine getirmesi gereken yöntem imzası sözleşmesinin bir parçasıdır.
  • Varsayılan değerler sağlıyorsanız parametreleri in yerine ref readonly olarak bildirin. ref readonly , çağıranın var olan bir değişkene başvuru geçirdiği senaryolar için tasarlanmıştır, ancak in parametreler değerlerin hem başvurularını hem de geçici kopyalarını kabul ederek varsayılan değerleri anlamlı hale getirir (CS9200).

Başvuru değişkenlerine nerede izin verileceği hakkında daha fazla bilgi için bkz. Yöntem parametreleri, Yineleyiciler, Zaman Uyumsuz programlama desenleri ve C# Dil Belirtimi.

unscoped ref Kısıtlama -ları

unscoped Bazı konumlarda parametrelerdeki ref niteleyiciye izin verilmez:

  • CS9101: UnscopedRefAttribute yalnızca yapı örneğine veya sanal arabirim yöntemlerine ve özelliklerine uygulanabilir ve oluşturuculara veya yalnızca yerleşik üyelere uygulanamaz.
  • CS9102: Uygulanan üyenin bu özniteliği olmadığından UnscopedRefAttribute bir arabirim uygulamasına uygulanamaz.

Bu hataları düzeltmek için:

  • Değiştiriciyi unscoped veya System.Diagnostics.CodeAnalysis.UnscopedRefAttribute özniteliğini yapı oluşturucularından ve yalnızca başlatma üyelerinden kaldırın. Bu üyeler, derleyicinin herhangi bir başvurunun başlatma aşamasını aşmadığından emin olması gereken özel başlatma semantiğine sahiptir ve kapsam dışı başvurulara izin vermek, yapının tam olarak erişilebilir hale gelmesinden önce başlatmanın tamamlanmasının garantisini ihlal eder (CS9101).
  • unscoped karşılık gelen arabirim yöntemine sahip olmadığında, değiştiriciyi arabirim uygulama yöntemlerinden kaldırın. Kapsamsız özellik, yöntemin başvuru ömrü garantileriyle ilgili sözleşmesini etkiler ve uygulamalar, çağıranların hangi uygulamanın çağrıldığından bağımsız olarak tutarlı yaşam süresi davranışına güvenebilmesi için uyguladıkları arabirimle aynı sözleşmeyi sürdürmelidir (CS9102).

Kapsamlı ve kapsam dışı referanslar hakkında daha fazla bilgi için Yöntem parametreleri ve düşük seviyeli yapı iyileştirmeleri özellik tanımına bakın.

Başvuru değişkenleri için başvuruda bulunmak gerekir

Bir değişkeni başvuru parametresine, başvuru dönüşüne veya başvuru yerel atamasına bağımsız değişken olarak sağlamanız gerekir:

  • CS0206: Başvuru döndürücü olmayan bir özellik veya dizin oluşturucu veya out değer ref olarak kullanılamayabilir
  • CS1510: A ref veya out değeri atanabilir bir değişken olmalıdır

Uyarı:

  • CS9191: ref Parametresine in karşılık gelen bağımsız değişkenin değiştiricisi ile ineşdeğerdir. Bunun yerine kullanmayı in göz önünde bulundurun.
  • CS9192: Bağımsız değişken veya ref anahtar sözcüğüyle in geçirilmelidir.
  • CS9193: Bağımsız değişken bir parametreye geçirildiğinden değişken ref readonly olmalıdır
  • CS9195: Bağımsız değişken anahtar sözcüğüyle in geçirilmelidir

Bu hataları düzeltmek için:

  • Bir özelliğin veya dizin oluşturucu erişiminin sonucunu, bir başvuru parametresi olarak geçirmeden önce yerel değişkende depolayın. Özellikler ve dizin oluşturucular , depolama konumlarına doğrudan erişim sağlamak yerine değer döndüren yöntemlerdir ve başvuru parametreleri diğer adla alınabilen kararlı bir bellek konumuna sahip gerçek bir değişken gerektirir (CS0206, CS1510).
  • Parametrelere bağımsız değişkenler geçirirken in yerine ref değiştiricisini kullanın. ref geriye dönük uyumluluk nedeniyle teknik olarak çalışmasına rağmen, in değiştirici, bağımsız değişkenin salt okunur olduğunu ve kopyalamadan referans olarak daha verimli şekilde iletilebileceğini daha net bir şekilde ifade eder (CS9191, CS9195).
  • Referans bekleyen parametrelere bağımsız değişkenleri geçirirken uygun referans değiştiriciyi (ref, in veya ref readonly) ekleyin. Değiştiricinin atlanması derleyicinin değerin geçici bir kopyasını oluşturmasına neden olabilir; bu verimsizdir ve çağıran kod değişikliklerin özgün değişkene yansıtılması bekleniyorsa beklenmeyen davranışlara yol açabilir (CS9192, CS9193).

Başvuru parametreleri ve başvuruya göre değişkenleri geçirme hakkında daha fazla bilgi için bkz. Yöntem parametreleri, ref anahtar sözcüğü ve C# Dil Belirtimi.

Yazılabilir başvuru değişkenleri yazılabilir bir başvuru gerektirir

Yazılabilir başvuru değişkeni, başvuranın da yazılabilir olmasını gerektirir. Aşağıdaki hatalar değişkenin yazılabilir olmadığını gösterir:

  • CS0192: Alan readonly veya ref değeri olarak out kullanılamaz (oluşturucu dışında)
  • CS0199: Alan static readonly veya refout değeri olarak kullanılamaz (statik oluşturucu dışında)
  • CS1605: Salt okunur olduğundan değişken veya ref değer olarak out kullanılamaz
  • CS1649: Bir readonly alanın üyeleri veya ref değeri olarak out kullanılamaz (oluşturucu dışında)
  • CS1651: Bir alanın alanları static readonly veya ref değeri olarak out kullanılamaz (statik oluşturucu dışında)
  • CS1655: Veya ref değeri olarak out tür alanları kullanılamaz
  • CS1657: Değişken veya ref değeri olarak out kullanılamaz
  • CS8329: Salt okunur bir ref değişken olduğundan değişken veya out değer olarak kullanılamaz
  • CS8330: Salt okunur bir ref değişken olduğundan değişkenin üyeleri veya out değeri olarak kullanılamaz
  • CS8331: Salt okunur bir ref değişken olduğundan değişken atanamaz veya atamanın sağ tarafı olarak kullanılamaz
  • CS8332: Salt okunur bir değişken olduğundan değişkenin bir üyesine atanamaz veya atamanın ref sağ tarafı olarak kullanılamaz

Bu hataları düzeltmek için:

  • Salt okunur bir alandaki değeri bir yerel değişkene kopyalayın ve bu yerel değişkeni ref veya out parametresi olarak geçirin. Salt okunur alanlar başlatmadan sonra sabittir (oluşturucular dışında) ve bunlara yazılabilir başvurulara izin vermek, salt okunur olarak sağladığı değişmezlik garantisini ihlal eder (CS0192, CS0199, CS1649, CS1651).
  • ref readonly veya in parametrelerini, salt okunur değişkenleri, yineleme değişkenlerini veya başka yazılamayan değerleri başvuruya göre geçirmeniz gerektiğinde ref veya out parametreleri yerine kullanın. Bu değiştiriciler yöntemin, değiştirme girişiminde bulunmadan yalnızca başvuruda bulunan değeri okuyacağını gösterir. Bu, özgün değişkenin (CS1605, CS1655, CS1657, CS8329) değişmezlik kısıtlamalarıyla uyumlu hale geliyor.
  • Salt okunur olan değişkenlerin üyelerini yazılabilir başvurular olarak iletmeden önce yerel değişkenlere kopyalayın. Üyenin kendisi salt okunur olarak bildirilmese de, salt okunur bir yol üzerinden (salt okunur bir alan, in parametre veya ref readonly yerel) erişilir ve derleyici salt okunur verilerin dolaylı mutasyonunu (CS8330, CS8332) önlemek için salt okunurluğun geçişini zorlar.
  • Salt okunur değişkenlere, foreach döngüsü değişkenlerine, using ifadesi kaynaklarına veya fixed ifadesi değişkenlerine yazılabilir başvuru atamalarından kaçının. Bu değişkenler, derleyici tarafından yönetilen özel yaşam süresi semantiğine sahiptir. Değişken, kapsamının sonunda otomatik olarak tamamlanır veya yok edilir. Dış referanslar, elden çıkarmadan sonra sarkan referanslar oluşturur (CS8331).

Salt okunur semantikler ve başvuru parametreleri hakkında daha fazla bilgi için bkz. readonly anahtar sözcüğü, in parametre değiştiricisi, ref readonly ve C# Dil Belirtimi.