Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA2021 |
| Cím | Nem hívható Enumerable.Cast<T> vagy Enumerable.OfType<T> nem kompatibilis típusok |
| Kategória | Megbízhatóság |
| A javítás kompatibilitástörő vagy nem törik | Törés |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Figyelmeztetésként |
Ok
Olyan típusparaméter hívása Enumerable.Cast<TResult>(IEnumerable) vagy Enumerable.OfType<TResult>(IEnumerable) megadása, amely nem kompatibilis a bemeneti gyűjtemény típusával.
Szabály leírása
Enumerable.Cast<TResult>(IEnumerable) és Enumerable.OfType<TResult>(IEnumerable) kompatibilis típusok megkövetelése a várt eredmény létrehozásához:
- Az a generikus típuskonverzió, amelyet a Cast<TResult>(IEnumerable) által visszaadott szekvencia használ, egy InvalidCastException kivételt dob futásidőben az inkompatibilis típusú elemek esetében.
- A használt OfType<TResult>(IEnumerable) általános típusellenőrzés nem lesz sikeres az inkompatibilis típusok elemeivel, ami üres sorozatot eredményez.
Az általános típusok nem támogatják a szélesítést és a felhasználó által definiált konverziókat.
Szabálysértések kijavítása
Használjon kompatibilis típust a következő típusparaméterhez Cast<TResult>(IEnumerable) : és OfType<TResult>(IEnumerable).
Példa
A következő kódrészlet a szabálysértéseket mutatja be:
var foods = new List<Food>();
// Violation - Food is incompatible with Beverages.
var drinks = Enumerable.Cast<Beverages>(foods);
// Violation - Food is incompatible with Beverages.
var drinks2 = Enumerable.OfType<Beverages>(foods);
class Food { }
class Bread : Food { }
class Beverages { }
' Violation - Integer is incompatible with String.
Dim a1 = (Array.Empty(Of Integer)()).Cast(Of String)
' Violation - Integer is incompatible with String.
Dim a1 = (Array.Empty(Of Integer)()).OfType(Of String)
A következő kódrészlet a javításokat mutatja be:
var foods = new List<Food>();
// Bread is compatible with Food.
var breads = Enumerable.Cast<Bread>(foods);
// Bread is compatible with Food.
var breads2 = Enumerable.OfType<Bread>(foods);
class Food { }
class Bread : Food { }
class Beverages { }
' Integer is compatible with Object.
Dim a1 = (Array.Empty(Of Integer)()).Cast(Of Object)
' Integer is compatible with Object.
Dim a1 = (Array.Empty(Of Integer)()).OfType(Of Object)
Mikor kell letiltani a figyelmeztetéseket?
Ne nyomja el a szabály figyelmeztetéseit, mert futásidejű kivételek vagy váratlan viselkedés (üres sorozatok) fordulhatnak elő.