Как ограничить T типами значений с помощью ограничения?

То, что вы выбираете, сильно зависит от того, что требуется. Я предпочитаю явное приведение

IMyInterface = (IMyInterface)someobj;

, потому что если объект должен иметь тип IMyInterface, а это не так - это определенно проблема. Лучше получить ошибку как можно раньше, потому что точная ошибка будет исправлена, а не побочный эффект.

Но если вы имеете дело с методами, которые принимают object в качестве параметра, то вам необходимо проверить его точный тип перед выполнением любого кода. В таком случае было бы полезно as, чтобы вы могли избежать InvalidCastException.

17
задан Prisoner ZERO 5 November 2010 в 19:52
поделиться

1 ответ

Отвечать на вопрос в Заголовок , но не тело вопроса.

Для покрытия весь типы обычно подразумевали Value Types (который включает Типы Значения Nullable , и также string даже при том, что это технически Ссылочный тип ), Вам нужны 3 перегрузки:

public void Foo<T>(T arg) where T : struct
public void Foo<T?>(T? arg) where T : struct
public void Foo<string>(string arg)

От Документы MSDN об универсальных ограничениях :

where T : struct аргумент типа должен быть не допускающим NULL-значения типом значения.

0
ответ дан 30 November 2019 в 11:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: