Casting 101 [общая информация о кастинге]:
Использовать [object] is [interface/class]
выражение:
if (setting is IMyCompanyProductSetting) {
...
}
В качестве альтернативы вы можете использовать ключевое слово as
, которое пытается привести объект к объекту, и, если он потерпит неудачу, вместо выдачи исключения он вернет null
. Обратите внимание, что целевой тип должен быть ссылочным типом в ключевом слове as
:
var prod = setting as IMyCompanyProductSetting;
if (prod != null) {
...
}
Вы должны всегда использовать приведенный выше код вместо эквивалентной обработки исключений.
Фильтрация IEnumerable
по типу (LINQy):
Как отметил Джон Скит, вы должны использовать OfType
метод расширения, чтобы легко фильтровать последовательность (при условии, что вы получили LINQ):
var filteredSequence = sequence.OfType<TargetType>();
Приведение IEnumerable
к типу (LINQy):
Если вы хотите попробовать привести каждый элемент к целевому типу (в отличие от фильтрации по типу), вы можете использовать метод расширения Cast
:
var castedSequence = sequence.Cast<TargetType>();