Преобразование в универсальный тип не выполняется в c # - PullRequest
2 голосов
/ 01 сентября 2011

Я бы хотел сохранить некоторую кодировку, имея возможность создавать динамический метод GetControl.Мои идеи примерно такие

private T GetControl<T>(ASPxGridView control, string element)
{
    var returnedElement = (T)control.FindEditFormTemplateControl(element);
    return returnedElement;
}

Которые я называю с

var myElement = GetControl<ASPxTextBox>(myGridView, "UserId");

Но это с треском проваливается:

Невозможно преобразовать тип 'System.Web.UI.Control 'to' T '

Есть советы?

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

Попробуйте добавить общее ограничение:

private T GetControl<T>(ASPxGridView control, string element) where T : Control
{
    var returnedElement = (T)control.FindEditFormTemplateControl(element);
    return returnedElement;
}
3 голосов
/ 01 сентября 2011

Вы можете обойти безопасность типов, применив object:

var returnedElement = (T)(object)control.FindEditFormTemplateControl(element);

Кроме того, я бы ограничил ваш универсальный тип Web.UI.Control, хотя бы только для целей самодокументирования:

private T GetControl<T>(ASPxGridView control, string element)
    where T: System.Web.UI.Control
{
    return (T)control.FindEditFormTemplateControl(element);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...