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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обощения 
V
    Опции темы
noooob
Дата 17.5.2013, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

private T TryRequest<T>(Func<BtcePair,T> req)
        {
            T result = default(T);
            try
            {
                result = req(CurrPair);
                if (!_IsConnected)
                {
                    _IsConnected = true;
                    if (ConnectionRestored != null)
                        ConnectionRestored();
                }

            }
            catch
            {
                if (_IsConnected)
                {
                    _IsConnected = false;
                    if (ConnectionLost != null)
                        ConnectionLost();
                }
                TryRequest(req);
            }
            return result;
            
        }

На этот метод компилятор не ругается, но при попытке вызвать через него метод с запросом пишет:
"Аргументы-типы для метода "TryRequest<T>(System.Func<BtcE.BtcePair,T>)" не должны определяться по использованию. Попытайтесь явно определить аргументы-типы."
Как быть? smile 

Это сообщение отредактировал(а) noooob - 17.5.2013, 00:47
PM MAIL   Вверх
Machaon
Дата 17.5.2013, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КаРолЬ АсьКи МуАЛя
*


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

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



Покажи функцию <BtcePair,T> 
PM MAIL ICQ Skype   Вверх
noooob
Дата 17.5.2013, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Собственно эти 2 метода предполагалось вызывать.
Код

         public static Depth GetDepth(BtcePair pair)
        {
            string resStr;
            string queryStr = string.Format("https://btc-e.com/api/2/{0}/depth", BtcePairHelper.ToString(pair));
            resStr = Query(queryStr);
            

            var res = JObject.Parse(resStr);
            return Depth.ReadFromJObject(res);
        }

        public static Ticker GetTicker(BtcePair pair)
        {
            string resStr;
            string queryStr = string.Format("https://btc-e.com/api/2/{0}/ticker", BtcePairHelper.ToString(pair));
            resStr = Query(queryStr);

            var res = JObject.Parse(resStr);
            return Ticker.ReadFromJObject(res["ticker"] as JObject);
        }


Это сообщение отредактировал(а) noooob - 17.5.2013, 15:13
PM MAIL   Вверх
Machaon
Дата 18.5.2013, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КаРолЬ АсьКи МуАЛя
*


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

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



А если попробовать получать аргументы заранее через дополнительную функцию, а потом уже используя их вызвать этот метод?

Это сообщение отредактировал(а) Machaon - 18.5.2013, 00:44
PM MAIL ICQ Skype   Вверх
AntonX
Дата 20.5.2013, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 1.2.2006
Где: РФ

Репутация: нет
Всего: -1



Проблема не здесь.
проблема в том месте где ты этот 
Цитата

   T TryRequest<T>(Func<BtcePair,T> req)
   
 вызываешь.

Дело в том, что при использовании Generic типов и методов необходимо чтобы типы параметров и возвращаемых значений были известны заранее.
В момент вызова почему-то компилятор не может вывести какой именно тип поляризуется в качестве T, потому и просит тебя указать в треугольных скобках какой конкретно тип должен быть.

Покажи как вызываешь функцию, там все ясно будет.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL ICQ   Вверх
AntonX
Дата 20.5.2013, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 1.2.2006
Где: РФ

Репутация: нет
Всего: -1



Написал короткий пример кода, который делает то, что нужно (как я понял)
Ошибка в нем не происходит.

Единственный способ ее получить, это передать ссылку на функцию не соответствующую интерфейсу Func<object,T>.
Скорее всего в так оно и есть в твоем коде.

Код

class A
{
    public T Foo<T>(Func<object,T> arg)
    {
        return arg(default(T));
    }
}

class Test
{
    private int test2(object arg)
    {
        return (int)arg;
    }

    private object test1(object arg)
    {
        return arg;
    }

    public void Run()
    {
        A a = new A();
        a.Foo(test1).Dump();
        a.Foo(test2).Dump();
    }
}

void Main()
{
    Test t = new Test();
    t.Run();
}


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL ICQ   Вверх
noooob
Дата 23.5.2013, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое за ответ,уже сам разобрался, заработало таким способом:
Код

  private T TryRequest<T>(Func<BtcePair, T> req, BtcePair Pair)
        {
            T result = default(T);
            try
            {
                result = req(Pair);
                if (!_IsConnected)
                {
                    _IsConnected = true;
                    if (ConnectionRestored != null)
                        ConnectionRestored();
                }
            }
            catch
            {
                if (_IsConnected)
                {
                    _IsConnected = false;
                    if (ConnectionLost != null)
                        ConnectionLost();
                }
                TryRequest(req, Pair);
            }
            return result;

        }

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

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


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

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


 




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


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

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