Yerel işlevlerle ilgili hataları ve uyarıları düzeltme

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

  • CS8108: Dinamik türdeki bağımsız değişken, yerel 'method' işlevinin 'parameter' adlı params parametresine geçirilemez.
  • CS8112: 'method' yerel işlevi, 'static' 'extern' olarak işaretlenmediği için bir gövdeye sahip olmalıdır.
  • CS8321: 'method' yerel işlevi bildirilir ancak hiçbir zaman kullanılmaz
  • CS8421: Statik yerel işlev 'değişken' başvurusu içeremez.
  • CS8422: Statik yerel işlev 'this' veya 'base' başvurusu içeremez.

C# 7.0'da yerel işlevler eklendi. Başka bir üyenin içinde yardımcı yöntemler tanımlamanıza olanak tanır. Bu makaledeki tanılamalar yerel işlev bildirimlerini, çağrıları, kullanımı ve yerel işlevler için static ek yakalama kısıtlamalarını kapsar.

Yerel işlev gövdeleri

  • CS8112: 'method' yerel işlevi, 'static extern' olarak işaretlenmediği için bir gövde içermelidir.

Yerel işlev bildirimi, yerel işlev static extern olarak bildirilmedikçe bir gövde içermelidir. Yerel işleve bir blok gövdesi veya ifade gövdesi ekleyin. Uygulama dışarıdan sağlanıyorsa yerel işlevi static extern işaretleyin ve bildirimin dış yöntemler için kurallara uydığından emin olun.

Params parametreleri ve dinamik argümanlar

  • CS8108: 'method' yerel işlevinin 'parameter' params parametresine dinamik türe sahip bağımsız değişken geçirilemez.

Yerel bir işlev çağrısı, dynamic parametresine params bağımsız değişkeni geçiremez. Değeri, çağrıdan önce parametresi tarafından beklenen öğe türüne veya dizi türüne params dönüştürün. Ayrıca, değerleri açıkça yazılan bir dizide depolayabilir ve bu diziyi yerel işleve geçirebilirsiniz.

Kullanılmayan yerel işlevler

  • CS8321: 'method' yerel işlevi bildirilir ancak hiçbir zaman kullanılmaz

Derleyici, yerel bir işlev tanımladığınızda ancak ulaşılabilir hiçbir kod onu çağırmadığında bu uyarıyı verir. Kullanılmayan yerel işlevi kaldırın veya onu içeren üyeden çağırın. Yerel işlevi gelecekteki bir değişiklikte kullanmayı planlıyorsanız, gerekli olana kadar kaynaktan uzak tutun.

Statik yerel işlevler durumu yakalayamıyor

  • CS8421: Statik yerel işlev 'değişken' başvurusu içeremez.
  • CS8422: Statik yerel işlev 'this' veya 'base' başvurusu içeremez.

Bir static yerel işlev dış kapsamdaki durumu yakalayamaz. this, this veya kendisi aracılığıyla dış kapsamdaki yerel değişkenlere, parametrelere ya da örnek üyelerine başvuruda bulunamaz. Yerel işlevin ihtiyaç duyduğu her değeri parametre olarak geçirin (CS8421, CS8422). Yerel işlevin dış kapsamdaki değişkenleri veya örnek durumunu yakalaması gerekiyorsa, static değiştiricisini kaldırın.

Aşağıdaki örnek, CS8422'ye neden olan referansları gösterir:

public class C
{
    private int counter = 1;

    public void IncreaseCounter()
    {
        static void LocalFunc(int addition)
        {
            this.counter += addition;   // CS8422
            base.ToString();            // CS8422

            counter += addition;        // CS8422: implicit this
            ToString();                 // CS8422: implicit base
        }

        LocalFunc(10);
    }
}

CS8422'yi düzeltmek için gerekli örnek verilerini yerel işleve geçirin, yardımcıyı örnek bağlamı dışına taşıyın veya yerel işlevin örnek durumuna erişmesi gerektiğinde kaldırınstatic.