Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Başvuru değişkenleriyle çalışırken aşağıdaki hatalar oluşturulabilir:
-
CS0192: Bir alan,
readonlydeğeri olarakrefveyaoutkullanılamaz (oluşturucu dışında) -
CS0199: Alan
static readonlyveyarefoutdeğeri olarak kullanılamaz (statik oluşturucu dışında) -
CS0206: Ref döndürmeyen bir özellik veya dizin oluşturucu,
outya darefdeğeri olarak kullanılamaz -
CS0631:
refveoutbu bağlamda geçerli değildir -
CS0767: Belirtilen tür parametrelerine sahip arabirim devralınamıyor çünkü bu, yöntemin yalnızca
refveoutbakımından farklı olan aşırı yüklemeler içermesine neden oluyor -
CS1510: A
refveyaoutdeğeri atanabilir bir değişken olmalıdır -
CS1605: Salt okunur olduğundan değişken,
refveyaoutdeğeri olarak kullanılamaz -
CS1623: Yineleyiciler
ref,inveyaoutparametrelerine sahip olamaz -
CS1649: Bir
readonlyalanının üyeleri,refveyaoutdeğeri olarak kullanılamaz (oluşturucu dışında) -
CS1651: static readonly alanın alanları,
refveyaoutdeğeri olarak kullanılamaz (static oluşturucu dışında) -
CS1655:
refveyaoutdeğeri olarak bu türdeki alanlar kullanılamaz -
CS1657: Değişken veya
refdeğeri olarakoutkullanılamaz -
CS1741: Bir
refveyaoutparametresi varsayılan değere sahip olamaz -
CS1939: Aralık değişkeni veya
outrefparametresi olarak geçirilemiyor -
CS1988: Zaman uyumsuz yöntemlerin
ref,inveyaoutparametreleri olamaz -
CS7084: Windows Çalışma Zamanı olayı,
outveyarefparametresi olarak geçirilemeyebilir. - 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 birrefifadede 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: Değişken, salt okunur bir değişken olduğundan
refveyaoutdeğeri olarak kullanılamaz -
CS8330: Değişkenin üyeleri, salt okunur bir değişken olduğundan
refveyaoutdeğeri olarak kullanılamaz -
CS8331: Salt okunur bir değişken olduğundan, bu değişkene atama yapılamaz veya bir
refatamasının sağ tarafında kullanılamaz -
CS8332: Yalnızca okunur bir değişken olduğundan, bir değişkenin üyesine atama yapılamaz veya
refatamasının 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: Bir
refatamanın sol tarafı bir ref değişkeni olmalıdır. -
CS8388: Bir değişken,
outbaşvuru yerel değişkeni olarak bildirilemez -
CS8977: 'UnmanagedCallersOnly' özniteliğiyle işaretlenmiş bir yöntemin imzasında '
ref', 'in' veya 'out' 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:
usingtüründeki bir deyim kaynağı async yöntemlerde veya async lambda ifadelerinde kullanılamaz. -
CS9190:
readonlydeğiştirici sonrarefbelirtilmelidir. -
CS9199: Bir
ref readonlyparametre 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:
inparametresine karşılık gelen bağımsız değişken için kullanılanrefdeğiştiricisi,inile eşdeğerdir. Bunun yerineinkullanmayı göz önünde bulundurun. -
CS9192: Bağımsız değişken,
refya dainanahtar sözcüğüyle geçirilmelidir. -
CS9193: Argüman,
ref readonlyparametresine geçirildiği için bir değişken olmalıdır -
CS9195: Bağımsız değişken
inanahtar sözcüğüyle 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 readonlyvarsayılan bir değer belirtilir, ancakref readonlyyalnızca başvurular için kullanılmalıdır. parametresini olarakinbildirmeyi göz önünde bulundurun. - CS9201: Ref alanı, kullanılmadan önce ref olarak atanmalıdır.
- CS9265: Alana hiçbir zaman ref ataması yapılmaz ve her zaman varsayılan değerine (null başvuru) sahip olacaktır
Bu hatalar ve uyarılar şu temalara uyar:
- Yanlış söz dizimi: Bildiriminizin veya kullanımınızın söz dizimi geçersiz.
-
refdeğişkenlerin geçerli olmadığı dil yapıları: Bazı C# ifadeleri değişkenlere izin vermez. Bunun nedeni genellikle ref güvenlik analizinin güvenilir biçimde gerçekleştirilememesidir. - 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 referans değişkenleri: Salt okunur bir değişkene olan referans, yazılabilir referans olarak geçirilemez.
Bu makalede, in, ref readonly, ref veya out değiştiricilerinden biriyle bildirilen bir parametre, ref yerel değişken, ref struct içindeki bir ref alanı veya ref dönüş değeri için genel bir terim olarak referans değişkeni kullanılır. Bir referans değişkeni, referent adı verilen başka bir değişkene işaret eder.
Hatalı söz dizimi
Bu hatalar, başvuru değişkenleriyle ilgili yanlış söz dizimi kullandığınızı gösterir:
-
CS8373: Atamanın
refsol tarafı bir ref değişkeni olmalıdır. -
CS8388: Bir
outdeğişken, ref yerel değişken olarak bildirilemez. -
CS9190:
readonlydeğiştirici sonrarefbelirtilmelidir.
Bu hataları düzeltmek için:
- Bir
= refiş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 readonlyyerinereadonly refolarak yazın. C# dil belirtimi, tüm başvuru parametre türlerinde tutarlı bir söz dizimini korumak için, parametre bildirimlerinderefdeğiştiricisinden öncereadonlyanahtar sözcüğünün bulunmasını gerektirir (CS9190). -
refYerel başvuru değişkenlerini bildirirken yerineoutanahtar sözcüğünü kullanın.outyalnızca bir yöntemin döndürmeden önce bir değer ataması gerektiğini belirten bir parametre değiştiricidir, ancakrefdiğ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 referans değişkeninin gerekli olduğu yerde kullanılamayacağını gösterir:
-
CS0631:
refveoutbu bağlamda geçerli değildir -
CS0767: Belirtilen tür parametrelerine sahip arabirim devralınamaz; çünkü bu, yöntemin yalnızca
refveoutaçısından farklı olan aşırı yüklemeler içermesine neden olur -
CS1623: Yineleyicilerde
ref,inveyaoutparametreleri olamaz -
CS1741: Bir
refveyaoutparametresi varsayılan değere sahip olamaz -
CS1939: Aralık değişkeni veya
outrefparametresi olarak geçirilemiyor -
CS1988: Zaman uyumsuz yöntemler
ref,inveyaoutparametrelerine sahip olamaz -
CS7084: Bir Windows Çalışma Zamanı olayı,
outveyarefparametresi olarak geçirilemez. -
CS8196: Örtük olarak türü belirlenmiş
outbir değişkene başvuruya aynı bağımsız değişken listesinde izin verilmez. -
CS8325: 'await' koşullu işleç içeren bir
refifadede 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: 'UnmanagedCallersOnly' özniteliği uygulanan bir yöntemin imzasında '
ref', 'in' veya 'out' kullanılamaz. - CS9072: Bir yapıbozma değişkeni, ref yerel değişken olarak bildirilemez
-
CS9104:
usingtüründeki bir ifade kaynağı, async yöntemlerde veya async lambda ifadelerinde kullanılamaz. -
CS9199: Bir
ref readonlyparametre 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 readonlyvarsayılan bir değer belirtilir, ancakref readonlyyalnızca başvurular için kullanılmalıdır. parametresini olarakinbildirmeyi göz önünde bulundurun. - CS9201: Ref alanına, kullanılmadan önce ref ataması yapılmış olmalıdır.
- CS9265: Alana hiçbir zaman ref ataması yapılmaz ve alan her zaman varsayılan değeri olan (null başvuru) olarak kalır
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).
-
refveoutparametrelerinden 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
outbir 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
refveoutdeğ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 hemrefhem deoutuygulama 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.
-
refdeğ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 verefeklemek, bir başvuruya referans oluşturur;refile 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 readonlykaldı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
refalanları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
inyerineref readonlyolarak bildirin.ref readonly, çağıranın var olan bir değişkene başvuru geçirdiği senaryolar için tasarlanmıştır, ancakinparametreler 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ıtlamalar
Bazı konumlarda ref parametrelerindeki unscoped niteleyicisi kullanılamaz:
- 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
unscopedveya 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). -
unscopedkarşı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).
Kapsamı belirlenmiş ve kapsamsız başvurular hakkında daha fazla bilgi için bkz. C# dil belirtiminde Yöntem parametreleri ve Güvenli bağlam kısıtlaması .
Referans değişkenleri bir başvuru hedefi gerektirir
Bir referans parametresine, referans dönüş değerine veya ref yerel atamasına bağımsız değişken olarak bir değişken vermeniz gerekir:
-
CS0206: Ref döndürmeyen bir özellik veya dizin oluşturucu,
outveyarefdeğeri olarak kullanılamaz -
CS1510: A
refveyaoutdeğeri atanabilir bir değişken olmalıdır
Uyarı:
-
CS9191:
inparametresine karşılık gelen bağımsız değişken için kullanılanrefdeğiştiricisi,inile eşdeğerdir. Bunun yerineinkullanmayı göz önünde bulundurun. -
CS9192: Argüman,
refveyainanahtar sözcüğüyle geçirilmelidir. -
CS9193: Argüman, bir
ref readonlyparametresine geçirildiği için değişken olmalıdır -
CS9195: Bağımsız değişken,
inanahtar sözcüğüyle 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
inyerinerefdeğiştiricisini kullanın.refgeriye dönük uyumluluk nedeniyle teknik olarak çalışmasına rağmen,indeğ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,inveyaref 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 referans değişkenleri, yazılabilir bir hedef gerektirir
Yazılabilir bir referans değişkeni, başvurulan nesnenin de yazılabilir olmasını gerektirir. Aşağıdaki hatalar değişkenin yazılabilir olmadığını gösterir:
-
CS0192: Bir
readonlyalan,refveyaoutdeğeri olarak kullanılamaz (yapıcı dışında) -
CS0199: Alan
static readonlyveyarefoutdeğeri olarak kullanılamaz (statik oluşturucu dışında) -
CS1605: Değişken, salt okunur olduğundan bir
refveyaoutdeğeri olarak kullanılamaz -
CS1649: Bir
readonlyalanının üyeleri,refveyaoutdeğeri olarak kullanılamaz (oluşturucu dışında) -
CS1651: Bir alanın alanları,
refveyaoutdeğeri olarak kullanılamaz (static readonlystatik bir oluşturucu dışında) -
CS1655:
reftüründeki alanlar,outveyarefdeğeri olarak kullanılamaz -
CS1657: Değişken veya
refdeğeri olarakoutkullanılamaz -
CS8329: Salt okunur bir değişken olduğundan, bir
refveyaoutdeğeri olarak kullanılamaz -
CS8330: Değişkenin üyeleri, salt okunur bir değişken olduğundan bir
refveyaoutdeğeri olarak kullanılamaz -
CS8331: Yalnızca okunur bir değişken olduğundan, bu değişkene atama yapılamaz veya bir
refatamasının sağ tarafında kullanılamaz -
CS8332: Yalnızca okunur bir değişken olduğundan, bir değişkenin üyesine atama yapılamaz veya
refatamasının 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
refveyaoutparametresi 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 readonlyveyainparametrelerini, salt okunur değişkenleri, yineleme değişkenlerini veya başka yazılamayan değerleri başvuruya göre geçirmeniz gerektiğinderefveyaoutparametreleri 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,
inparametre veyaref readonlyyerel) 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.