Genel tür parametreleri ve genel tür bağımsız değişkenleriyle ilgili hataları ve uyarıları düzeltme

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

  • CS0080: Genel olmayan bildirimlerde kısıtlamalara izin verilmez.
  • CS0081: Tür parametresi bildirimi bir tür değil tanımlayıcı olmalıdır.
  • CS0224: Vararg içeren bir yöntem genel olamaz, genel türde olamaz veya params parametresine sahip olamaz.
  • CS0304: Kısıtlaması olmadığından new() değişken türünün bir örneği oluşturulamıyor.
  • CS0305: Genel türü kullanmak için N türü bağımsız değişkenleri gerekir.
  • CS0306: Tür, tür bağımsız değişkeni olarak kullanılamayabilir.
  • CS0307: 'tanımlayıcı' tür bağımsız değişkenleriyle kullanılamaz.
  • CS0308: Genel olmayan tür veya yöntem tür bağımsız değişkenleriyle kullanılamaz.
  • CS0310: Türün genel tür veya yöntemde parametre olarak kullanılabilmesi için genel parametresiz oluşturucuya sahip soyut olmayan bir tür olması gerekir.
  • CS0311: Tür, genel tür veya yöntemde tür parametresi T olarak kullanılamaz. 'type1' ile 'type2' arasında örtük başvuru dönüştürmesi yoktur.
  • CS0312: 'type1' türü, genel tür veya yöntemde tür parametresi olarak kullanılamaz. 'type1' nullable türü, 'constraint' kısıtlamasını sağlamaz.
  • CS0313: 'type1' türü, genel tür veya yöntemde tür parametresi olarak kullanılamaz. 'type1' null atanabilir türü, 'constraint' kısıtlamasını karşılamaz. Null atanabilir türler hiçbir arabirim kısıtını karşılayamaz.
  • CS0314: Tür, genel tür veya yöntemde tür parametresi olarak kullanılamaz. 'type'den 'constraint' türüne kutulama dönüştürmesi veya tür parametresi dönüştürmesi yoktur.
  • CS0315: Tür, genel tür veya yöntemde tür parametresi T olarak kullanılamaz. 'tür'den 'kısıtlama'ya kutulama dönüştürmesi yok.
  • CS0401: Kısıtlama new() , belirtilen son kısıtlayıcı kısıtlama olmalıdır.
  • CS0403: Null, null atanamayan bir değer türü olabileceği için tür parametresine dönüştürülemez. Bunun yerine default(T) kullanmayı göz önünde bulundurun.
  • CS0405: Tür parametresi için yinelenen kısıtlama.
  • CS0406: Sınıf türü kısıtlaması 'constraint' diğer kısıtlamalardan önce gelmelidir.
  • CS0409: 'type parameter' tür parametresi için bir kısıtlama yan tümcesi zaten belirtilmiş. Tür parametresinin tüm kısıtlamaları tek bir where yan tümcesinde belirtilmelidir.
  • CS0411: 'method' yönteminin tür bağımsız değişkenleri kullanımdan çıkarılamaz. Tür bağımsız değişkenlerini açıkça belirtmeyi deneyin.
  • CS0412: Parametre: parametre, yerel değişken veya yerel işlev, yöntem türü parametresiyle aynı ada sahip olamaz.
  • CS0413: Tür parametresi, bir sınıf türü kısıtlaması veya as kısıtlaması olmadığından işleciyle class birlikte kullanılamaz.
  • CS0417: Tanımlayıcı: Değişken tipinin örneği yaratılırken bağımsız değişkenler sağlanamaz.
  • CS0449: class, struct, unmanaged, , notnullve default kısıtlamaları birleştirilemez veya çoğaltılamaz ve kısıtlamalar listesinde önce belirtilmelidir.
  • CS0450: Tür Parametresi: hem bir kısıtlama sınıfını hem de class veya struct kısıtlamasını belirtemez.
  • CS0451: new() kısıtlaması, struct kısıtlaması ile birlikte kullanılamaz.
  • CS0452: 'type name' türünün, genel tür veya yöntem 'generic' içindeki 'parameter name' parametresi olarak kullanılabilmesi için bir başvuru türü olması gerekir.
  • CS0453: 'type name' türü, 'generic' genel türünde veya yönteminde 'parametre adı' parametresi olarak kullanabilmek için null atanamaz bir değer türü olmalıdır.
  • CS0454: Tür Parametresi 1 ve Tür Parametresi 2'yi içeren döngüsel kısıtlama bağımlılığı.
  • CS0455: Tür parametresi çakışan 'constraint1' ve 'constraint2' kısıtlamalarını devralır.
  • CS0456: 'type parameter 1' tür parametresi 'struct' kısıtlaması içerir, bu nedenle 'tür parametresi 1', 'tür parametresi 2' için kısıtlama olarak kullanılamaz.
  • CS0693: 'type parameter' tür parametresi, 'type' dış türündeki tür parametresiyle aynı ada sahiptir.
  • CS0694: Tür parametresi, kapsayan türle veya yöntemle aynı ada sahiptir.
  • CS0695: 'type', 'interface1' ve 'interface2' öğelerini aynı anda implement edemez çünkü bazı tür parametre değişimleri için birleşebilirler.
  • CS0698: Bir öznitelik sınıfı olduğundan genel bir tür türünden türetilemez.
  • CS0699: 'generic', 'identifier' tür parametresini tanımlamaz.
  • CS0701: 'identifier' geçerli bir kısıtlama değil. Kısıtlama olarak kullanılan bir tür bir arabirim, korumalı olmayan bir sınıf veya tür parametresi olmalıdır.
  • CS0702: Kısıtlama özel sınıf olamaz.
  • CS0703: Tutarsız erişilebilirlik: kısıtlama türü bildirimden daha az erişilebilir.
  • CS0704: Bir tür parametresi olduğundan 'type' içinde sanal üye dışı arama yapılamıyor.
  • CS0706: Geçersiz kısıtlama türü. Kısıtlama olarak kullanılan bir tür bir arabirim, korumalı olmayan bir sınıf veya tür parametresi olmalıdır.
  • CS0717: Statik sınıf: Statik sınıflar kısıtlama olarak kullanılamaz.
  • CS0718: 'type': Statik türler tür bağımsız değişkenleri olarak kullanılamaz.
  • CS1720: varsayılan 'generic type' değeri null olduğundan ifade her zaman System.NullReferenceException'a neden olur.
  • CS1763: 'parameter', 'type' türündedir. Dize dışında bir başvuru türünün varsayılan parametre değeri yalnızca null ile başlatılabilir.
  • CS1948: 'name' aralık değişkeni, yöntem türü parametresiyle aynı ada sahip olamaz.
  • CS1960: Geçersiz varyans değiştirici. Yalnızca arabirim ve temsilci türü parametreleri değişken olarak belirtilebilir.
  • CS1961: Geçersiz varyans: Tür parametresi, 'tür' üzerinde kovaryant olarak geçerli olmalıdır. 'Tür parametresi' kontravaryanttır.
  • CS3024: Kısıtlama türü 'type' CLS uyumlu değil.
  • CS7002: Genel bir adın beklenmeyen kullanımı.
  • CS8322: Dinamik türe sahip bağımsız değişken, çıkarımlı tür bağımsız değişkenleri olan genel yerel işleve geçirilemez.
  • CS8375: 'new()' kısıtlaması 'yönetilmeyen' kısıtlamasıyla kullanılamaz.
  • CS8377: 'type' türü, genel tür veya 'generic' yönteminde 'parameter' parametresi olarak kullanabilmek için herhangi bir iç içe yerleştirme düzeyindeki tüm alanlarla birlikte null atanamaz bir değer türü olmalıdır.
  • CS8379: 'type parameter 1' tür parametresi 'yönetilmeyen' kısıtlamasına sahiptir, bu nedenle 'tür parametresi 1', 'tür parametresi 2' için bir kısıtlama olarak kullanılamaz.
  • CS8380: 'type': hem kısıtlama sınıfını hem de 'yönetilmeyen' kısıtlamasını belirtemez.
  • CS8387: 'type parameter' tür parametresi, 'method' dış yöntemindeki tür parametresiyle aynı ada sahiptir.
  • CS8389: Geçerli bağlamda tür bağımsız değişkeninin atlanmasına izin verilmiyor.
  • CS8427: Numaralandırmalar, sınıflar ve yapılar 'in' veya 'out' tür parametresine sahip bir arabirimde bildirilemez.
  • CS8665: 'method' yöntemi, 'type parameter' tür parametresi için bir 'sınıf' kısıtlaması belirtir, ancak geçersiz kılınan veya açıkça uygulanan 'method' yönteminin karşılık gelen tür parametresi 'type parameter' bir başvuru türü değildir.
  • CS8666: 'method' yöntemi, 'type parameter' tür parametresi için bir 'yapı' kısıtlaması belirtir, ancak geçersiz kılınmış veya açıkça uygulanan 'method' yönteminin karşılık gelen tür parametresi 'type parameter' null atanamaz bir değer türü değildir.
  • CS8822: 'method' yöntemi, 'type parameter' tür parametresi için 'varsayılan' kısıtlamasını belirtir, ancak geçersiz kılınan veya açıkça uygulanan 'method' yönteminin karşılık gelen tür parametresi 'type parameter' bir başvuru türü veya değer türüyle kısıtlanır.
  • CS8823: 'varsayılan' kısıtlaması yalnızca geçersiz kılma ve açık arabirim uygulama yöntemlerinde geçerlidir.
  • CS8893: 'type', 'UnmanagedCallersOnly' için geçerli bir çağrı kuralı türü değil.
  • CS8894: 'UnmanagedCallersOnly' ile özniteliklendirilen bir yöntemde parametre veya dönüş türü olarak 'type' kullanılamaz.
  • CS8895: 'UnmanagedCallersOnly' ile özniteliklendirilen yöntemler genel tür parametrelerine sahip olamaz ve genel türde bildirilemez.
  • CS8896: 'UnmanagedCallersOnly' yalnızca normal statik soyut olmayan, sanal olmayan yöntemlere veya statik yerel işlevlere uygulanabilir.
  • CS9011: Anahtar sözcük delegate kısıtlama olarak kullanılamaz. Öyle mi demek System.Delegateistedin?
  • CS9012: Beklenmeyen anahtar sözcükrecord. record struct veya record class demek mi istediniz?
  • CS9338: Tutarsız erişilebilirlik: türü sınıftan daha az erişilebilir.

Tür parametresi bildirimi ve adlandırma

  • CS0080: Genel olmayan bildirimlerde kısıtlamalara izin verilmez.
  • CS0081: Tür parametresi bildirimi bir tür değil tanımlayıcı olmalıdır.
  • CS0412: Parametre: bir parametre, yerel değişken veya yerel fonksiyon, bir yöntem türü parametresiyle aynı ada sahip olamaz.
  • CS0693: 'type parameter' tür parametresi, dış tür 'type'daki tür parametresiyle aynı ada sahiptir.
  • CS0694: Tür parametresi, kapsayan tür ya da yöntemle aynı ada sahiptir.
  • CS0699: 'generic', 'identifier' tür parametresini tanımlamaz.
  • CS1948: 'name' aralık değişkeni, yöntem türü parametresiyle aynı ada sahip olamaz.
  • CS8387: 'type parameter' tür parametresi, dış yöntem 'method'daki tür parametresiyle aynı ada sahiptir.
  • CS9012: Beklenmeyen anahtar sözcükrecord. record struct veya record class demek mi istediniz?

Bu hatalar, genel tür ve yöntemlerdeki tür parametrelerini nasıl bildirdiğiniz ve adlandırdığınızla ilgilidir. Tür parametre adları geçerli tanımlayıcılar olmalı, kapsamdaki diğer tanımlayıcılarla çakışmamalıdır ve bildirimin tür parametre listesinde görünmelidir.

  • Kısıtlama yan tümcesini genel olmayan bildirimlerden (CS0080) kaldırın. where yan tümcesi yalnızca tür parametrelerini bildiren genel türler ve yöntemler üzerinde kullanılabilir. Kısıtlamaları uygulamanız gerekiyorsa, önce tür veya yöntem bildiriminize tür parametreleri ekleyin.
  • Gerçek tür adlarını tür parametresi bildirimlerinde (CS0081) tanımlayıcılarla değiştirin. Tür parametrelerini, somut türler (T veya TKey gibi) yerine tanımlayıcılar (TValue, int veya string) kullanarak bildirmeniz gerekir. Tür parametresinin amacı, genel tür veya yöntem kullanıldığında derleyicinin gerçek türlerle değiştirdiği bir yer tutucu görevi görmektir.
  • Adlandırma çakışmalarını önlemek için tür parametrelerini, yerel değişkenleri, parametreleri veya aralık değişkenlerini yeniden adlandırın (CS0412, CS0694, CS1948). Tür parametre adları aynı kapsamdaki tanımlayıcıları gölgeleyemez ve içeren türün veya yöntemin adıyla eşleşemez. LINQ aralık değişkenleri bir yöntemin tür parametre adını da yeniden kullanamaz. Bu tür çakışmalar hangi tanımlayıcıya başvurulmakta olduğu konusunda belirsizlik oluşturur.
  • Dış parametreleri gölgeleyen iç tür parametreleri için farklı bir ad kullanın (CS0693, CS8387). Genel bir üye (yöntem veya iç içe türü gibi) genel bir sınıf veya yöntem içinde olduğunda, iç tür parametresinin dış ile aynı olması gerekmez. Onlara aynı adın verilmesi, hangi tür parametresine başvurulmakta olduğu konusunda karışıklığa neden olur. İç tür parametresi için ayrı bir ad kullanın.
  • Kısıtlama yan tümcelerindeki tüm tür parametrelerinin tür parametresi listesinde (CS0699) bildirildiğinden emin olun. Bir where tümcesi yalnızca jenerik bildirimde yer alan tür parametrelerine başvurabilir. where yan tümcesindeki ad, bildirilmiş herhangi bir tür parametresiyle eşleşmiyorsa yazım yanlışları veya yazım hataları olup olmadığını denetleyin.
  • Doğru kayıt bildirimi söz dizimini kullanın (CS9012). Kayıt türünü bildirirken, record class veya bir referans türü için yalnızca record struct kullanmanız gerekir. record anahtar sözcüğü tek başına, derleyicinin farklı bir bildirim sözdizimi beklediği konumlarda yer alamaz.

Daha fazla bilgi için bkz. Genel Tür Parametreleri ve Genel Değerler.

Kısıtlama tanımı ve sıralaması

  • CS0401: Kısıtlama new() , belirtilen son kısıtlayıcı kısıtlama olmalıdır.
  • CS0406: Sınıf türü kısıtlaması 'constraint' diğer kısıtlamalardan önce gelmelidir.
  • CS0409: 'type parameter' tür parametresi için bir kısıtlama yan tümcesi zaten belirtilmiş. Tür parametresinin tüm kısıtlamaları tek bir where yan tümcesinde belirtilmelidir.
  • CS0449: class, struct, unmanaged, , notnullve default kısıtlamaları birleştirilemez veya çoğaltılamaz ve kısıtlamalar listesinde önce belirtilmelidir.
  • CS0450: Tür Parametresi: Hem kısıtlama sınıfı hem de class veya struct kısıtlamasını aynı anda belirtemezsiniz.
  • CS0451: new() kısıtlaması, struct kısıtlamasıyla birlikte kullanılamaz.
  • CS8375: 'new()' kısıtlaması 'yönetilmeyen' kısıtlamasıyla kullanılamaz.
  • CS8380: 'type': hem kısıtlama sınıfını hem de 'yönetilmeyen' kısıtlamasını belirtemez.
  • CS9011: Anahtar sözcük delegate kısıtlama olarak kullanılamaz. Öyle mi demek System.Delegateistedin?

Tür parametrelerindeki kısıtlamalar belirli bir sırayı izlemelidir: birincil kısıtlamalar (class, struct, unmanaged, notnullveya default) önce gelir, sonra bir sınıf türü kısıtlaması, ardından arabirim kısıtlamaları ve son olarak new() oluşturucu kısıtlaması gelir. Bazı kısıtlamalar birbirini dışlar ve birleştirilemiyor. Tek bir tür parametresi için tüm kısıtlamalar tek bir where yan tümcesinde yer almalıdır.

  • Kısıtlamayı new() kısıtlama listesinin (CS0401) sonuna yerleştirin. new() kısıtlaması, diğer tüm kısıtlamalardan sonra görünmelidir. Örneğin, where T : new(), IDisposable'i where T : IDisposable, new() ile değiştirin.
  • Sınıf türü kısıtlamasını arabirim kısıtlamalarının (CS0406) önüne yerleştirin. Tür parametresini arabirimlerle birlikte belirli bir temel sınıfla kısıtladığınızda, önce sınıfın görünmesi gerekir. Örneğin, where T : IDisposable, MyBaseClass'i where T : MyBaseClass, IDisposable ile değiştirin.
  • Tür parametresinin tüm kısıtlamalarını tek where bir yan tümcede (CS0409) birleştirin. Aynı tür parametresi için birden çok where yan tümce kullanamazsınız. Bunları tek bir tümcede birleştirin: where T : I where T : new() öğesini where T : I, new() olarak değiştirin. Birden çok where yan tümce yalnızca farklı tür parametrelerini hedeflediklerinde geçerlidir.
  • Birincil kısıtlamaları önce yerleştirin ve birbirini dışlayan kısıtlamaları (CS0449) birleştirmeyin. class, struct, unmanaged, notnull veya default öğelerinden en fazla birini belirtebilirsiniz ve bunun kısıtlama listesinde ilk sırada görünmesi gerekir. class ve struct kısıtlamaları birbirini dışlar, aynı şekilde class ve unmanaged kısıtlamaları da birbirini dışlar.
  • Belirli bir sınıf kısıtlamasını , classveya struct (unmanaged, CS8380) ile birleştirmeyin. Bir tür parametresi belirli bir sınıf türüyle kısıtlanmışsa, örtük olarak bir referans türüdür; bu da struct veya unmanaged kısıtlamasıyla çelişir. Sınıf kısıtlamasını veya birincil kısıtlamayı kaldırın.
  • new() öğesini struct veya unmanaged ile birleştirmeyin (CS0451, CS8375). Tüm değer türlerinin örtük olarak public parametresiz bir kurucusu vardır; bu nedenle new() kısıtlaması, struct ile birleştirildiğinde gereksizdir. Aynı durum , anlamına gelen unmanagediçin structde geçerlidir. Kısıtlamayı new() kaldırın.
  • delegate'yi kısıtlama yan tümcelerinde (System.Delegate) ile değiştirin. anahtar delegate sözcüğü, kısıtlama olarak değil temsilci türlerini bildirmek için kullanılır. Tür parametresini temsilci türleriyle sınırlamak için kısıtlama türü olarak kullanın System.Delegate .

Daha fazla bilgi için bkz . Tür parametrelerindeki kısıtlamalar.

Geçerli kısıtlama türleri

  • CS0405: Tür parametresi için yinelenen kısıtlama.
  • CS0701: 'identifier' geçerli bir kısıtlama değil. Kısıtlama olarak kullanılan bir tür bir arabirim, korumalı olmayan bir sınıf veya tür parametresi olmalıdır.
  • CS0702: Kısıtlama özel sınıf olamaz.
  • CS0703: Tutarsız erişilebilirlik: kısıtlama türü bildirimden daha az erişilebilir.
  • CS0706: Geçersiz kısıtlama türü. Kısıtlama olarak kullanılan bir tür bir arabirim, korumalı olmayan bir sınıf veya tür parametresi olmalıdır.
  • CS0717: Statik sınıf: Statik sınıflar kısıtlama olarak kullanılamaz.
  • CS3024: Kısıtlama türü 'type' CLS uyumlu değil.

Kısıtlama bir arabirim, korumalı olmayan bir sınıf veya tür parametresi olmalıdır. .NET tür sistemindeki özel anlamları nedeniyle veya devralınamadığı için bazı türler kısıtlama olarak geçersizdir.

  • Yinelenen kısıtlamaları kaldırın (CS0405). Her kısıtlama, kısıtlama yan tümcesinde yalnızca bir kez görünebilir. Eğer where T : I, I varsa, yinelenen öğeyi kaldırın.
  • Kısıtlama olarak yalnızca korumalı olmayan türleri kullanın (CS0701). Korumalı sınıflar, yapılar ve sabit listeleri devralınamaz, bu nedenle kısıtlama olarak hiçbir amaca hizmet etmemektedir. İstenen türlerin uyguladığı bir arabirim kullanın veya korumalı olmayan bir temel sınıf kullanın.
  • Kısıtlama olarak özel sınıflar kullanmayın (CS0702). , Objectve Array türleri ValueTypekısıtlama olarak kullanılamaz. Zaten her tür Object'den türetildiği için ona kısıtlamak hiçbir değer sağlamaz. Array ve ValueType doğrudan devralınamaz soyut temel türleridir. Dizi benzeri bir davranışa ihtiyacınız varsa, IList<T> veya IEnumerable<T> kullanın.
  • Kısıtlama türlerinin en az genel tür (CS0703) kadar erişilebilir olduğundan emin olun. Dış kod geçerli tür bağımsız değişkenleri sağlayamayacağından, genel bir tür, iç türleri kullanan kısıtlamalara sahip olamaz. Kısıtlama türünü genel yapın veya genel türün erişilebilirliğini azaltın.
  • Yalnızca arabirimleri, korumalı olmayan sınıfları veya tür parametrelerini kısıtlama olarak kullanın (CS0706). Kısıtlama olarak dizileri, korumalı sınıfları, yapıları, sabit listeleri veya diğer geçersiz türleri kullanamazsınız. İstenen türlerin uyguladığı bir arabirim kullanmayı göz önünde bulundurun.
  • Statik sınıfları kısıtlama olarak kullanmayın (CS0717). Statik sınıflar yalnızca statik üyeler içerdiği için genişletilemiyor. Hiçbir tür statik sınıftan türetemez ve bunu kısıtlama olarak işe yaramaz hale getirir.
  • Tür kısıtlaması (CS3024) için CLS uyumlu bir tür kullanın. Bir derleme ile [assembly: CLSCompliant(true)]işaretlendiğinde, genel tür kısıtlaması olarak CLS uyumlu olmayan bir tür kullanmak, bazı dillerde yazılmış kodun genel sınıfınızı kullanmasını imkansız hale getirebilir.

Daha fazla bilgi için bkz . Tür parametrelerindeki kısıtlamalar.

Kısıtlama karşılanması ve dönüştürmeler

  • CS0311: Tür, genel tür veya yöntemde tür parametresi T olarak kullanılamaz. 'type1' ile 'type2' arasında örtük başvuru dönüştürmesi yoktur.
  • CS0312: Tür, genel tür veya yöntemde tür parametresi olarak kullanılamaz. Null atanabilir tür 'constraint' kısıtlamasını karşılamıyor.
  • CS0313: Bu tür, genel türde veya yöntemde tür parametresi olarak kullanılamaz. Boş değer atanabilir tür, 'constraint' kısıtlamasını karşılamaz. Boş değer atanabilir türler hiçbir arabirim kısıtlamasını karşılayamaz.
  • CS0314: Tür, genel tür veya yöntemde tür parametresi olarak kullanılamaz. 'type'den 'constraint' türüne kutulama dönüştürmesi veya tür parametresi dönüştürmesi yoktur.
  • CS0315: Tür, genel tür veya yöntemde tür parametresi T olarak kullanılamaz. 'tür'den 'kısıtlama'ya kutulama dönüştürmesi yok.
  • CS0452: 'type name' türünün, 'generic' genel türünde veya yönteminde 'parameter name' parametresi olarak kullanılabilmesi için bir referans türü olması gerekir.
  • CS0453: 'type name' türü, 'generic' genel türünde veya yönteminde 'parametre adı' parametresi olarak kullanabilmek için null atanamaz bir değer türü olmalıdır.
  • CS8377: 'type' türünün, genel tür veya yöntem 'generic' için 'parameter' parametresi olarak kullanılabilmesi için, her düzeyde iç içe geçmiş tüm alanlarıyla birlikte null atanamaz bir değer türü olması gerekir.

Bu hatalar, tür bağımsız değişkeni genel tür parametresinde bildirilen kısıtlamaları karşılamadığında oluşur. Tür argümanının tüm kısıtları karşılaması için doğru dönüşümlere, devralma ilişkilerine ve yapısal özelliklere sahip olması gerekir.

  • Tür argümanını, kısıtlama türüne örtük bir başvuru dönüşümüne sahip olan bir argüman ile değiştirin (CS0311). Tür parametresi where T : BaseType gibi bir kısıtlamaya sahip olduğunda, herhangi bir tür bağımsız değişkeni örtük başvuru dönüştürme veya kimlik dönüştürme yoluyla BaseType'e dönüştürülebilir olmalıdır. Örtük sayısal dönüştürmeler (örneğin, short türünden int türüne) genel tür parametresi kısıtlarını karşılamaz.
  • Boş değer atanamayan değer türlerini kullanın veya kısıtlama türünü değiştirin (CS0312, CS0313). Null atanabilir değer türleri (örneğin int?), temel alınan değer türlerinden farklıdır ve aynı kısıtlamaları karşılamaz. Nullable değer türleri, nullable sarmalayıcının kendisi arabirimi uygulamadığı için arabirim kısıtlamalarını sağlayamaz. Tür bağımsız değişkeni olarak değer türünün null atanamaz biçimini kullanın.
  • Türetilmiş herhangi bir sınıf bildiriminde (CS0314) temel sınıfın tür parametresi kısıtlamalarını yineleyin. Türetilmiş bir genel sınıf kısıtlanmış bir temel genel sınıftan devraldığında, türetilen sınıfın ilgili tür parametrelerinde aynı kısıtlamaları bildirmesi gerekir.
  • Tür bağımsız değişkenlerinin, başvuru türü ya da sınıf kısıtlamalarını (CS0315) karşıladığından emin olun. Bir tür parametresi bir sınıf türüyle kısıtlandığında, kısıtlama ilişkisini karşılayan bir kutulama dönüştürmesi olmadığından, tür bağımsız değişkeni olarak bir değer türünü (struct) kullanamazsınız. Kısıtı devralan veya uygulayan bir referans türü kullanın.
  • class kısıtlaması belirtildiğinde, tür bağımsız değişkeni olarak bir başvuru tipi kullanın (CS0452). struct veya int gibi değer türleri, class kısıtını karşılayamaz. Tür bağımsız değişkenini bir başvuru türüyle değiştirin ya da genel tür değer türleriyle çalışabiliyorsa class kısıtlamasını kaldırın.
  • struct kısıtlaması belirtildiğinde, tür bağımsız değişkeni olarak null atanamaz bir değer türü kullanın (CS0453). Başvuru türleri, null atanabilir değer türleri (int?) ve değer türü olmayan diğer türler bir struct kısıtlamasını karşılayamaz. int, double veya kullanıcı tanımlı bir struct gibi somut, null atanamayan bir değer türü kullanın.
  • Kısıtlama belirtildiğinde unmanaged alanlarının tümü yönetilmeyen türler olan bir tür kullanın (CS8377). unmanaged kısıtlaması, iç içe yerleştirmenin her düzeyindeki her alanın da yönetilmeyen bir tür olduğu, null atanamayan bir değer türü gerektirir. Yönetilmeyen olduğu bilinmeyen başvuru türünde alanlar veya genel tür parametreleri içeren türler bu kısıtlamayı karşılamaz.

Daha fazla bilgi için bkz . Tür parametrelerindeki kısıtlamalar.

Kısıtlama çakışmaları ve döngüsel bağımlılıklar

  • CS0454: Tür Parametresi 1 ve Tür Parametresi 2'yi içeren döngüsel kısıtlama bağımlılığı.
  • CS0455: Tür parametresi çakışan 'constraint1' ve 'constraint2' kısıtlamalarını devralır.
  • CS0456: 'type parameter 1' tür parametresi 'struct' kısıtlaması içerir, bu nedenle 'tür parametresi 1', 'tür parametresi 2' için kısıtlama olarak kullanılamaz.
  • CS8379: 'type parameter 1' tür parametresi 'yönetilmeyen' kısıtlamasına sahiptir, bu nedenle 'tür parametresi 1', 'tür parametresi 2' için bir kısıtlama olarak kullanılamaz.

Kısıtlamalar döngüsel bağımlılıklar oluşturamaz ve tür parametreleri aynı anda karşılanması imkansız olan çakışan kısıtlamaları devralamaz. Değer türü kısıtlamaları (struct ve unmanaged) örtük olarak mühürlenir, bu nedenle diğer tür parametrelerinde kısıtlama olarak kullanılamazlar.

  • Döngüsel kısıtlama bağımlılıklarını (CS0454) kaldırın. Tür parametresi, kısıtlamaları aracılığıyla doğrudan veya dolaylı olarak kendisine bağımlı olamaz. Örneğin, where T : U where U : T döngüsel bağımlılık oluşturur. Kısıtlamalardan birini kaldırarak döngüyü kırın.
  • Çakışan devralınan kısıtlamaları (CS0455) kaldırın. C# birden çok sınıf devralmayı desteklemediğinden tür parametresi birden çok ilişkisiz sınıfla kısıtlanamaz. Benzer şekilde, hem struct hem de bir sınıf türü olarak kısıtlanamaz. Tür hiyerarşinizi yeniden yapılandırın veya çakışan kısıtlamalardan birini kaldırın.
  • Başka bir tür parametresi için kısıtlama olarak struct ile kısıtlanmış veya unmanaged ile kısıtlanmış bir tür parametresi kullanmayın (CS0456, CS8379). Değer türü kısıtlamaları örtük olarak kalıtıma kapalıdır, bu nedenle başka hiçbir tür onlardan kalıtım alamaz. Bu hatayı çözmek için değer türünü veya yönetilmeyen kısıtlamayı ilk tür parametresi aracılığıyla dolaylı olarak kısıtlamak yerine doğrudan ikinci tür parametresine yerleştirin.

Daha fazla bilgi için bkz . Tür parametrelerindeki kısıtlamalar.

Geçersiz kılma ve uygulama kısıtlama kuralları

  • CS8665: 'method' yöntemi, 'type parameter' tür parametresi için bir 'sınıf' kısıtlaması belirtir, ancak geçersiz kılınan veya açıkça uygulanan 'method' yönteminin karşılık gelen tür parametresi 'type parameter' bir başvuru türü değildir.
  • CS8666: 'method' yöntemi, 'type parameter' tür parametresi için bir 'yapı' kısıtlaması belirtir, ancak geçersiz kılınmış veya açıkça uygulanan 'method' yönteminin karşılık gelen tür parametresi 'type parameter' null atanamaz bir değer türü değildir.
  • CS8822: 'method' yöntemi, 'type parameter' tür parametresi için 'varsayılan' kısıtlamasını belirtir, ancak geçersiz kılınan veya açıkça uygulanan 'method' yönteminin karşılık gelen tür parametresi 'type parameter' bir başvuru türü veya değer türüyle kısıtlanır.
  • CS8823: 'varsayılan' kısıtlaması yalnızca geçersiz kılma ve açık arabirim uygulama yöntemlerinde geçerlidir.

Bir sanal yöntemi geçersiz kıldığınızda veya açıkça bir arabirim yöntemi uyguladığınızda, geçersiz kılma yönteminin tür parametrelerindeki kısıtlamalar temel yöntemin kısıtlamalarıyla uyumlu olmalıdır. default kısıtlaması, yalnızca override ve açık arabirim uygulaması senaryolarında, bir tür parametresinin ne class ne de struct kısıtlamasına sahip olmadığını belirtmek için kullanılan özel bir değiştiricidir.

  • Geçersiz kılma yönteminin kısıtlamalarının temel yöntemin kısıtlamalarıyla (CS8665, CS8666) eşleştiğinden emin olun. Temel yöntemin karşılık gelen tür parametresi bir referans türüyle kısıtlanmamışsa, geçersiz kılma yöntemi class kısıtlaması ekleyemez. Benzer şekilde, temel yöntemin tür parametresi bir struct değer türüyle kısıtlanmamışsa kısıtlama ekleyemez. Ezme, temel bildirimle uyumlu olmalıdır.
  • Kısıtlamayı default yalnızca temel yöntemin tür parametresi kısıtlanmamışsa (CS8822) kullanın. default kısıtlaması, tür parametresinin class veya struct kısıtlaması olmadığını gösterir. Geçersiz kılınan yöntemin karşılık gelen tür parametresi zaten bir class veya struct kısıtlamasına sahipse, default uygulayamazsınız.
  • default kısıtını yalnızca override veya açık arabirim uygulaması metotlarında kullanın (CS8823). Kısıtlama default normal yöntem bildirimlerinde geçerli değildir. Bu, özellikle temel sınıfta kısıtlanmamış bir tür parametresi bulunan bir yöntemi geçersiz kılarken oluşabilecek belirsizliği gidermek için vardır; ayrıca geçersiz kılan yöntemin de bu parametreyi kısıtlanmamış bıraktığını belirtmeniz gerektiğinde kullanılır.

Daha fazla bilgi için bkz. Tür parametrelerindeki kısıtlamalar ve default kısıtlama.

Oluşturucu kısıtlamaları

  • CS0304: Kısıtlaması olmadığından new() değişken türünün bir örneği oluşturulamıyor.
  • CS0310: Türün genel tür veya yöntemde parametre olarak kullanılabilmesi için genel parametresiz oluşturucuya sahip soyut olmayan bir tür olması gerekir.
  • CS0417: Tanımlayıcı: Değişken türünün örneği oluşturulurken bağımsız değişkenler sağlanamaz.

Bu hatalar, new() kısıtlaması ve tür parametrelerini new işleciyle örnekleme ile ilgilidir.

  • Örneğini oluşturmanız gereken tür parametrelerine new() kısıtlamasını ekleyin (CS0304). new T() ifadesini bir jenerik tür veya yöntem içinde kullandığınızda, derleyici herhangi bir tür argümanının parametresiz bir kurucuya sahip olduğunu garanti etmelidir. new() kısıtlaması bu güvenceyi sağlar.
  • Tür bağımsız değişkenlerinin ortak, parametresiz oluşturuculara (CS0310) sahip olduğundan emin olun. Tür parametresi kısıtlamaya new() sahip olduğunda, tür bağımsız değişkeni olarak kullanılan herhangi bir somut tür soyut olmamalıdır ve genel parametresiz oluşturucu sağlamalıdır. Yalnızca özel, korumalı veya parametreli oluşturuculara sahip türler kısıtlamayı new() karşılayamaz.
  • Tür parametrelerinin örneğini oluştururken oluşturucu bağımsız değişkenlerini kaldırın (CS0417). Kısıtlama new() yalnızca parametresiz bir oluşturucuyu garanti eder. new T(arguments) öğesine bağımsız değişken geçiremezsiniz. Belirli bağımsız değişkenler alan nesneler oluşturmanız gerekiyorsa, fabrika deseni veya oluşturma davranışını tanımlayan bir arayüz kısıtlaması kullanmayı değerlendirin.

Daha fazla bilgi için bkz. Tür parametrelerindeki kısıtlamalar ve new() kısıtlama.

Tip argüman sayısı ve kullanımı

  • CS0224: Vararg içeren bir yöntem genel olamaz, genel türde olamaz veya params parametresine sahip olamaz.
  • CS0305: Genel türü kullanmak için N türü bağımsız değişkenleri gerekir.
  • CS0306: Tür, tür bağımsız değişkeni olarak kullanılamayabilir.
  • CS0307: 'tanımlayıcı' tür bağımsız değişkenleriyle kullanılamaz.
  • CS0308: Jenerik olmayan tür veya metot tür bağımsız değişkenleriyle kullanılamaz.
  • CS7002: Genel bir adın beklenmeyen kullanımı.
  • CS8389: Geçerli bağlamda tür bağımsız değişkeninin atlanmasına izin verilmiyor.

Bu hatalar, genel tür ve yöntemlere doğru sayıda ve türde bağımsız değişken sağlamakla ilgilidir.

  • (__arglist) kullanan yöntemlerden genel tür parametrelerini veya genel tür bildirimleri içeren öğeleri kaldırın. __arglist Değişken bağımsız değişken listelerini işlemeye yönelik çalışma zamanı mekanizmaları genel tür parametreleri için gereken tür değiştirmesiyle çakıştığı için anahtar sözcüğü genel değerlerle uyumsuzdur.
  • Genel bildirimde (CS0305) belirtilen tür bağımsız değişkenlerinin tam sayısını belirtin. Tanımdaki her jenerik tür parametresinin, jenerik tür örneklendiğinde karşılık gelen bir tür bağımsız değişkeni olmalıdır.
  • Tür bağımsız değişkenleri olarak yalnızca geçerli türleri kullanın (CS0306). Genel türler, çöp toplayıcının izleyebileceği yönetilen türler gerektirdiğinden, int* veya char* gibi işaretçi türleri tür argümanları olarak kullanılamaz.
  • Tür bağımsız değişkeni söz dizimlerini genel olmayan yapılardan (CS0307, CS0308) kaldırın. Açılı ayraçlar içine alınmış tür argümanları yalnızca tür parametreleri bildiren jenerik türler ve yöntemler için uygulanabilir. Türün genel sürümünü içeren ad alanını içeri aktardığınızdan emin olun.
  • Genel öğeleri desteklemeyen bildirimlerden tür parametrelerini kaldırın (CS7002). Enumarasyonlar gibi bazı yapılar genel olamaz. Numaralandırma değerleri için genel bir kapsayıcıya ihtiyacınız varsa, bunun yerine genel bir sınıf veya yapı kullanmayı göz önünde bulundurun.
  • Tüm gerekli tür bağımsız değişkenlerini açıkça sağlayın (CS8389). Bazı bağlamlarda, örneğin typeof işlecini kullanırken veya temsilciler oluştururken, tüm tür bağımsız değişkenlerini belirtmeniz gerekir ve bunları atlayamazsınız. Örneğin, tür bağımsız değişkenini çıkarmaya çalışmak yerine typeof(List<int>) kullanın.

Daha fazla bilgi için bkz. Genel Tür Parametreleri ve Genel Değerler.

Tür argümanı çıkarımı

  • CS0411: 'method' yönteminin tür bağımsız değişkenleri kullanımdan çıkarılamaz. Tür bağımsız değişkenlerini açıkça belirtmeyi deneyin.

Bu hata, tür bağımsız değişkenlerini açıkça sağlamadan genel bir yöntemi çağırdığınızda oluşur ve derleyici hangi tür bağımsız değişkenlerini amaçladığınız çıkaramaz. Derleyici, çağrı noktasında metoda ilettiğiniz bağımsız değişkenlerin türlerinden tür bağımsız değişkenlerini çıkarır.

  • Tür bağımsız değişkenlerini açıkça açılı ayraçlar içinde belirtin (CS0411). Derleyici, metot argümanlarından tür argümanlarını belirleyemiyorsa, bunları doğrudan belirtin. Örneğin, G()'i G<int>() ile değiştirin. Bu hata genellikle, genel bir yöntemin türün çıkarılabileceği parametreleri olmadığında veya bir null bağımsız değişkeni geçirildiğinde derleyici kastedilen türü belirleyemediğinde ortaya çıkar.

Daha fazla bilgi için bkz. Genel Yöntemler.

Tür parametresi varyansı

  • CS1960: Geçersiz varyans değiştirici. Yalnızca arabirim ve temsilci türü parametreleri değişken olarak belirtilebilir.
  • CS1961: Geçersiz varyans: Tür parametresi, 'type' üzerinde kovaryant olarak geçerli olmalıdır. 'tür parametresi' karşıvaryanttır.
  • CS8427: Numaralandırmalar, sınıflar ve yapılar 'in' veya 'out' tür parametresine sahip bir arabirimde bildirilemez.

Varyans değiştiricileri (in değişken karşıtı için, out kovaryans için) arabirim ve temsilci bildirimlerinde tür parametrelerini nasıl kullanabileceğinizi denetler. Yalnızca arabirimler ve temsilciler varyansı destekler. Kovarant (out) türü parametresi yalnızca çıkış konumlarında (dönüş türlerinde) görünebilirken, değişken karşıtı (in) tür parametresi yalnızca giriş konumlarında (parametre türleri) görüntülenebilir.

  • Varyans değiştiricilerini yalnızca arabirim ve temsilci türü parametrelerinde (CS1960) kullanın. Sınıflar, yapılar ve diğer tür bildirimleri varyans değiştiricilerini desteklemez. Yalnızca interface ve delegate bildirimleri, tür parametrelerinde in veya out kullanabilir.
  • Yalnızca döndürülen türlerde görünen tür parametreleri için out (kovaryant), yalnızca parametre türlerinde görünen tür parametreleri içinse in (kontravaryant) kullanın (CS1961). Tür parametresinin hem giriş hem de çıkış konumlarında görünmesi gerekiyorsa, varyans değiştiricisini kaldırın.
  • Bir değişken arabiriminde (CS8427) sabit listeleri, sınıfları veya yapıları bildirmeyin. in veya out tür parametrelerine sahip bir arabirimin içindeki iç içe tür bildirimlerine, varyans güvenlik kurallarını ihlal edebilecekleri için izin verilmez. İç içe türü arabirim bildiriminin dışına taşıyın.

Daha fazla bilgi için bkz. Genel Değerlerde Kovaryans ve Kontravaryans.

Genel tür kullanım kısıtlamaları

  • CS0403: Null değer türü null atanamaz bir değer türü olabileceği için null değeri tür parametresine dönüştürülemiyor. Bunun yerine kullanmayı default(T) göz önünde bulundurun.
  • CS0413: Tür parametresi, bir sınıf türü kısıtlaması veya as kısıtlaması olmadığından işleciyle class birlikte kullanılamaz.
  • CS0695: 'type' hem 'interface1' hem de 'interface2' uygulayamaz çünkü bazı tür parametre değişimleri için birbirlerinden oluşabilirler.
  • CS0698: Bir öznitelik sınıfı olduğundan genel bir tür, belirli bir türden türetilemez.
  • CS0704: Bir tür parametresi olduğundan 'type' içinde sanal üye dışı arama yapılamıyor.
  • CS0718: 'type': Statik türler tür bağımsız değişkenleri olarak kullanılamaz.
  • CS1720: varsayılan 'generic type' değeri null olduğundan ifade her zaman System.NullReferenceException'a neden olur.
  • CS1763: 'parameter', 'type' türündedir. Dize dışında bir başvuru türünün varsayılan parametre değeri yalnızca null ile başlatılabilir.
  • CS8322: Dinamik türe sahip bağımsız değişken, çıkarımlı tür bağımsız değişkenleri olan genel yerel işleve geçirilemez.
  • CS9338: Tutarsız erişilebilirlik: türü sınıftan daha az erişilebilir.

Bu hatalar, genel türlerin ve tür parametrelerinin ifadelerde, devralmada ve üye erişiminde nasıl kullanılabileceğinin kısıtlamalarıyla ilgilidir.

  • null atamalarını default(T) ile değiştirin veya bir class kısıtlaması (CS0403) ekleyin. null öğesini kısıtlanmamış bir tür parametresine atadığınızda, derleyici tür argümanının bir referans türü olduğunu garanti edemez. Herhangi bir tür için uygun varsayılan değeri sağlayan öğesini kullanın default(T)veya özellikle başvuru türü semantiğine ihtiyacınız varsa bir class kısıtlama ekleyin.
  • işlecini (class) kullanırken as veya belirli bir tür kısıtlaması ekleyin. as işleci, dönüştürme başarısız olursa null döndürür, ancak değer türleri null olamaz. class Tür parametresinin her zaman bir başvuru türü olduğundan emin olmak için bir kısıtlama ekleyin.
  • Birleştirebilecek tür parametreleriyle aynı genel arabirimi birden çok kez uygulamaktan kaçının (CS0695). Bir sınıf, farklı tür parametreleriyle (gibi class G<T1, T2> : I<T1>, I<T2>) birden çok kez genel bir arabirim uyguladığında, her iki parametre için de aynı türle örnek oluşturmak çakışmaya neden olur. Arabirimi yalnızca bir kez uygulayın veya birleştirmeyi önlemek için yeniden yapılandırın.
  • Öznitelik sınıflarından (CS0698) genel tür parametrelerini kaldırın. Genel öznitelikler artık desteklendiğinden bu hata artık geçerli C# sürümlerinde üretilmemiştir.
  • İç içe üye erişimi (CS0704) için tür parametresi yerine somut kısıtlama türünü kullanın. Bir tür parametresi aracılığıyla iç içe geçmiş türlere veya sanal olmayan üyelere erişemezsiniz. T.InnerTypeyerine, gibi BaseClass.InnerTypebilinen kısıtlama türünü doğrudan kullanın.
  • Tür bağımsız değişkenleri olarak statik türler kullanmayın (CS0718). Statik türler örneklendirilemez ve jenerik bağımsız değişkenler olarak da kullanılamaz. Jenerik argümandan statik türü kaldırın.
  • T bir başvuru türüyle kısıtlandığında (CS1720), default(T) üzerinde örnek üyeleri çağırmaktan kaçının. T bir class kısıtlamasına sahip olduğunda, default(T)null olur; bu nedenle üzerinde örnek üyeleri çağırmak her zaman bir NullReferenceException fırlatır. Üyeleri çağırmadan önce null bir denetim ekleyin veya kodu doğrudan kullanmaktan default(T) kaçınmak için yeniden yapılandırın.
  • Türü başvuru tipi olan isteğe bağlı parametreler için varsayılan parametre değeri olarak null kullanın (CS1763). Genel bir yöntemin T türünde bir parametresi varsa ve T bir başvuru tipiyse, default(U) yerine null kullanın; çünkü isteğe bağlı parametreler için varsayılan değerlerin derleme zamanı sabiti olması gerekir ve default(T) bu gereksinimi karşılamaz.
  • Dinamik değerleri genel yerel işlevlere (CS8322) geçirirken tür bağımsız değişkenlerini açıkça belirtin. dynamic argümanını genel bir yerel fonksiyona geçirdiğinizde derleyici tür argümanlarını çıkaramaz. Tür bağımsız değişkenini açıkça belirtin veya dinamik değere tür dönüşümü yapın.
  • Ortak veya korumalı imzalarda kullanılan tür bağımsız değişkenlerinin en az üye (CS9338) kadar erişilebilir olduğundan emin olun. Public bir genel tür üyesi, genel erişime açık tür argümanları kullanmalıdır. Tür bağımsız değişkenini public yapın veya üyenin erişilebilirliğini azaltın.

Daha fazla bilgi için bkz. Tür parametreleri ve varsayılan değer ifadeleriyle ilgili kısıtlamalar.

UnmanagedCallersOnly kısıtlamaları

  • CS8893: 'type', 'UnmanagedCallersOnly' için geçerli bir çağrı kuralı türü değil.
  • CS8894: 'UnmanagedCallersOnly' ile özniteliklendirilen bir yöntemde parametre veya dönüş türü olarak 'type' kullanılamaz.
  • CS8895: 'UnmanagedCallersOnly' ile özniteliklendirilen yöntemler genel tür parametrelerine sahip olamaz ve genel türde bildirilemez.
  • CS8896: 'UnmanagedCallersOnly' yalnızca normal statik soyut olmayan, sanal olmayan yöntemlere veya statik yerel işlevlere uygulanabilir.

UnmanagedCallersOnlyAttribute özniteliği, yönetilmeyen kodun çağırabileceği yöntemleri işaretler. Çalışma zamanının yönetilen ve yönetilmeyen çağrı kuralları arasındaki geçişi işlemesi gerektiğinden bu yöntemlerin katı gereksinimleri vardır.

  • Özniteliğinde UnmanagedCallersOnly yalnızca geçerli çağırma kuralı türlerini kullanın (CS8893). Özniteliğin CallConvs özelliği yalnızca System.Runtime.CompilerServices ad alanındaki tanınan çağrı kuralı türlerini kabul eder.
  • Parametre ve dönüş türleri olarak yalnızca blittable türlerini kullanın (CS8894). UnmanagedCallersOnly ile işaretlenen yöntemler, yönetilen türleri (örneğin string veya object) parametre ya da dönüş türü olarak kullanamaz; çünkü yönetilmeyen çağıranlar çöp toplayıcı tarafından yönetilen referansları işleyemez.
  • Yöntemlerden UnmanagedCallersOnly genel tür parametrelerini kaldırın ve bunları genel türlerde (CS8895) bildirmeyin. Çalışma zamanı genel tür değiştirmeleri için doğru çağırma kuralını belirleyemediğinden yönetilmeyen çağırma kuralları genel değerleri desteklemez.
  • Yalnızca sıradan statik, soyut olmayan, sanal olmayan yöntemlere veya statik yerel işlevlere (UnmanagedCallersOnly) uygulayın. Yönetilmeyen arayanlar bu yöntemlerin gerektirdiği dağıtım mekanizmalarını gerçekleştiremediğinden örnek yöntemleri, soyut yöntemler ve sanal yöntemler ile UnmanagedCallersOnly işaretlenemez.

Daha fazla bilgi için bkz. UnmanagedCallersOnlyAttribute.