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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> распаковка кортежей в .NET4 
V
    Опции темы
GoldFinch
Дата 12.5.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



В .NET 4 ввели кортежи (System.Tuple)
Я правильно понимаю, что нет способа распаковать кортеж, как например в С++

Код

int x;
string s;
tie(x, s) = make_tuple(42, "test");


т.е. можно только извлекать из него данные по одному?
PM MAIL ICQ   Вверх
diadiavova
Дата 12.5.2010, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Класс System.Tuple содержит статические методы для создания кортежей, а сами кортежи являются экземплярами типов System.Tuple<T1>, System.Tuple<T1, T2> и тд. А у них есть соответствующие свойства.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
GoldFinch
Дата 13.5.2010, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



diadiavova, свойства это не то, я хочу сразу извлекать данные из кортежа в переменные

через свойства это
Код

var t = func_rets_tuple();
int x = t.item1;
string s = t.item2;


а я хочу что-то вроде
Код

int x = 0;
string s = null;
tie(ref x, ref s) = func_rets_tuple();

хотя в С# тут преимуществ мало =\
переменные должны быть заранее объявлены и инициализированы, надо явно указывать "ref"

но в ряде случаев это все равно было бы удобнее, когда переменные уже где-то объявлены
PM MAIL ICQ   Вверх
diadiavova
Дата 13.5.2010, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Вообще-то, на сколько я понимаю кортежи в дотнете появились для взаимодействия с кодом, написанным на F#. В самом C# вместо них лучше использовать анонимные типы. То, о чём ты пишешь в том или ином виде реализовать можно, только мне не вполне понятно зачем. Ну если очень надо, просто напиши метод, в котором первым параметром будет кортеж, а остальными - переменные и все дела, но только к чему всё это?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
GoldFinch
Дата 13.5.2010, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



diadiavova, кортежи сами по себе удобны, когда надо из функции вернуть несколько значений

жаль конечно что в C# они так криво сделаны
может в .NET5 их пофиксят =)
PM MAIL ICQ   Вверх
diadiavova
Дата 13.5.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(GoldFinch @  13.5.2010,  15:15 Найти цитируемый пост)
жаль конечно что в C# они так криво сделаны
может в .NET5 их пофиксят =) 

Не пофиксят, я уже написал, что в шарпе для этих же целей существуют анонимные типы, вводить в язык ещё одну сущность, аналогичную существующей, да ещё и менее удобную(в контексте языка) никто не будет.
http://msdn.microsoft.com/ru-ru/library/bb397696(VS.90).aspx


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
GoldFinch
Дата 14.5.2010, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



diadiavova, ни у System.Tuple, ни у анонимных типов, нет средств для одновременного присвоения их содержимого нескольким переменным, как я хотел бы
PM MAIL ICQ   Вверх
diadiavova
Дата 14.5.2010, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Тогда опиши ситуацию, зачем тебе это надо. Обычно если требуется, чтобы метод возвращал несколько значений, используют аут-параметры, если тебе нужен отдельный объект, то тут анонимные типы, но вот в какой ситуации то, что ты хочешь может оказаться более удобным, мне ,честно говоря, представить себе трудно. Может ты вообще не туда копаешь?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
GoldFinch
Дата 15.5.2010, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



diadiavova, наверное действительно дело во мне, я хочу писать на C# так же как писал раньше на С++ и питоне.
увидел знакомое слово tuple - и обрадовался)

в самом деле, out параметры - то что надо для возврата нескольких значений
PM MAIL ICQ   Вверх
Exception
Дата 17.5.2010, 14:52 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну да, для человека с функциональным бэкграундом кортежи (сразу вспоминаю крестражи из Гарри Поттера, лол) — привычный способ возврата нескольких значений.  С другой стороны, в C# для этого используются out-параметры, а tuples поддерживаются скорее ради F# и некоторых случаев, когда надо оперировать подобными элементами.
В MSDN Magazine хорошо написано, почему класс System.Tuple такой, какой он есть:
http://msdn.microsoft.com/en-us/magazine/dd942829.aspx
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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