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.
.NET 10'dan itibaren, IComparer<TSource>
kabul eden System.Linq.Queryable.MaxBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TSource>) ve System.Linq.Queryable.MinBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TSource>) uzantı yöntemleri kullanım dışıdır. Lütfen bunun yerine kabul IComparer<TKey>
eden yeni eklenen aşırı yüklemeleri kullanın.
Kodda bu eski uzantı yöntemlerini çağırmak derleme zamanında uyarı SYSLIB0061
oluşturur ve genellikle çalışma zamanında bir IndexOutOfRangeException oluşturur.
Kullanımdan kaldırılmış olma nedeni
Özgün MaxBy
ve MinBy
kabul edilen ifade IComparer<T>? comparer
parametresi, tür parametresi için genel tür TSource
IComparer<T>? comparer
kullanılarak yanlış uygulandı. Bu yanlıştır çünkü Comparer<T>.Compare(T, T) yöntemine geçirilen değerler Expression<Func<TSource, TKey>> keySelector
ifade parametresi tarafından seçilir, bu nedenle ayıklanan değer TKey
genel türündedir.
Uyarı
Bu, daha önce yalnızca TSource
ve TKey
aslında aynı yapı türündeyse çalışırdı. Türler farklıysa, bir çalışma zamanı hatası IndexOutOfRangeException: Dizin, dizinin sınırlarının dışındaydı.IQueryable<TSource> source
için gerekli uzantı yöntemi bulunamadığı için (örneğin, MaxBy içinde) fırlatılırdı.
Geçici çözüm
Yeni eklenen ve IComparer<TKey>? comparer
parametresini kabul eden MaxBy
veya MinBy
yöntemini kullanın. Bunlar istisna oluşturmaz.
Örneğin:
// This worked correctly since TKey and TSource are both int.
Enumerable.Range(1, 10)
.AsQueryable()
.MaxBy(key => (0 - key), Comparer<int>.Default);
// This would throw since TKey is string but TSource is int
// and will trigger the obsoletion warning now and would
// throw an exeception at runtime.
Enumerable.Range(1, 10)
.AsQueryable()
.MaxBy(key => key.ToString(), Comparer<int>.Default);
// This previously would not compile before to the addition of
// the new methods since TKey is string and TSource is int.
// It will now compile and execute correctly.
Enumerable.Range(1, 10)
.AsQueryable()
.MaxBy(key => key.ToString(), Comparer<string>.Default);
Uyarıyı gizleme
Eski API'yi kullanmanız gerekiyorsa, uyarıyı kodda veya proje dosyanızda gizleyebilirsiniz.
Yalnızca tek bir ihlali engellemek için, önişlemci yönergelerini kaynak dosyanıza ekleyerek uyarıyı devre dışı bırakın ve sonra yeniden etkinleştirin.
// Disable the warning.
#pragma warning disable SYSLIB0061
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0061
Projenizdeki tüm SYSLIB0061
uyarılarını engellemek için proje dosyanıza bir <NoWarn>
özelliği ekleyin.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0061</NoWarn>
</PropertyGroup>
</Project>
Daha fazla bilgi için bkz. uyarıları gizleme.