Отличный ответ, спасибо. Небольшое улучшение для поддержки Windows Phone и Zune:
if (navigator.userAgent.match(/Android/i) ||
navigator.userAgent.match(/webOS/i) ||
navigator.userAgent.match(/iPhone/i) ||
navigator.userAgent.match(/iPad/i) ||
navigator.userAgent.match(/iPod/i) ||
navigator.userAgent.match(/BlackBerry/) ||
navigator.userAgent.match(/Windows Phone/i) ||
navigator.userAgent.match(/ZuneWP7/i)
) {
// some code
self.location = "top.htm";
}
Вы не можете этого сделать. Почему бы просто не иметь три метода и не позволить компилятору сделать тяжелую работу за вас?
public void Add(Address address) { m_Address.Add(address); }
public void Add(Email email) { m_Email.Add(email); }
public void Add(Phone phone) { m_Phone.Add(phone); }
CLR не допускает множественное наследование, что вы и пытаетесь выразить. Вы хотите, чтобы T
был одновременно адресом
, электронной почтой
и телефоном
(я предполагаю, что это имена классов). Таким образом невозможно. Более того, весь этот метод не имеет смысла. Вам придется либо ввести базовый интерфейс для всех трех классов, либо использовать три перегрузки метода Add
.
Как насчет создания интерфейса или базового класса для этих трех типов?
Но, глядя на ваш код, кажется, что вы недостаточно хорошо используете универсальный класс. Смысл использования generic в том, что вам не нужно приводить его к какому-либо конкретному типу (в данном случае это вы).
В этом случае вы не получите никакой реальной пользы от дженериков. Я бы просто создал разные методы добавления для каждого типа параметра.
В этом случае, Я бы не стал заморачиваться, так как вы все равно сравниваете типы. Используйте это:
public void Add(object Obj)
{
if (Obj is Address)
m_Address.Add(Obj as Address);
else if (Obj is Email)
m_Email.Add(Obj as Email);
else if (Obj is Phone)
m_Phone.Add(Obj as Phone);
else
return;
}
Я не думаю, что поддерживаются несколько предложений. У вас также могут быть отдельные перегрузки методов.
Не думаю, что поддерживаются несколько предложений. У вас также могут быть отдельные перегрузки методов. Не думаю, что поддерживаются несколько предложений. У вас также могут быть отдельные перегрузки методов.где T : C1, C2, C3. Запятая разделена для ограничений. Попробуйте использовать базовый класс или интерфейсы.