Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой паттерн можно применить? для параметризации запроса к объекту 
:(
    Опции темы
Medved
Дата 2.12.2005, 03:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154



Сабж, кроме общеизвестного паттерна Комманда, так как в данной ситуации мне представляется, что можно обойтись менее трудоемким паттерном.

Вот этот запрос:
Код

public IFeatureLayer GetTopFeatureLayer()
{
    for (int i = 0; i < _MapControl.LayerCount; i++ )
    {
        ILayer layer = _MapControl.get_Layer(i);
        if (layer is IFeatureLayer) { return layer as IFeatureLayer; }
    }    
    return null;
}


необходимо привести к такому виду:
Код

public <TYPE> GetTopLayer(<TYPE>)
{
    for (int i = 0; i < _MapControl.LayerCount; i++ )
    {
        ILayer layer = _MapControl.get_Layer(i);
        if (layer is <TYPE>) { return layer as <TYPE>; }
    } 
    return null;
}


А то я уже вторые сутки подряд работаю, и что-то запарился, не могу сообразитьsmile


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
stab
Дата 2.12.2005, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Может так:

Код

    public class Class1
    {
        public T GetTopLayer<T>()
        {
            ILayer result = null;

            // ...
            // some code
            // ...

            if (result is T)
            {
                return (T) result;
            }
            else
            {
                return default(T);
            }
        }
    }



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
mr.DUDA
Дата 2.12.2005, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Если без generic-ов и без типизации, то так:
Код
public object GetTopLayer (Type t)
{
   for (int i = 0; i < _MapControl.LayerCount; i++ )
   {
      ILayer layer = _MapControl.get_Layer(i);
      Type tl = layer.GetType();
      if (tl.Equals(t))
         return layer;
      foreach(Type ti in t.GetInterfaces())
         if(tl.GetInterface(ti.Name) != null)
             return layer;
} 
return null;
}



--------------------
user posted image
PM MAIL WWW   Вверх
Medved
Дата 2.12.2005, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154



Спасибо всем.

mr.DUDA, хорошее решение!


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
mr.DUDA
Дата 3.12.2005, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Минус в том, что приходится работать по рефлекшн, и отсутствует типизация напрочь. Короче, generics рулят, как показал cully.


--------------------
user posted image
PM MAIL WWW   Вверх
Exception
Дата 5.12.2005, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



А что значит "return default(T)"?
PM   Вверх
stab
Дата 5.12.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Возвратить значение поумолчанию для типа T. Так как заранее тип T неизвестен, то нельзя написать return null.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0941 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.