Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094

Анонимные коллекции в другие коллекции, как?

14.10.2016, 11:01. Показов 3183. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Говорю сразу, я не уверен что есть такой термин как анонимная коллекция.
Наверно будет правильно сказать анонимная переменная содержащая коллекцию, кто знает, скажите как будет правильней.

Ближе к делу, есть некая папка содержащая файлы.

Пишем код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.IO;
using System.Collections;
using System.Text;
 
class clWork_with_csv_file
{
    static void Main()
    {
        string path_for_file = "C:\\test\\";
 
        DirectoryInfo Dir_in = new DirectoryInfo(path_for_file);
 
        var fi = Dir_in.EnumerateFiles();
 
        Console.WriteLine("Ready!");
        Console.ReadKey();
    }
}
И вот я получаю анонимную переменную fi содержащую коллекцию, а теперь я ХОЧУ использовать эту коллекцию в методе другого класса, но так как передать анонимную переменную в метод другого класса я не могу, возникает вопрос! Могу ли я лёгким движение руки перегнать эту анонимную коллекцию в другую коллекцию, List например, ну или в какую нибудь другую, при этом не создавая отдельный класс для новой коллекции.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2016, 11:01
Ответы с готовыми решениями:

Заменить элементы одной коллекции на элементы другой коллекции
Всем привет, у меня такой вопрос: есть 2 коллекции: List<Person> list1 = new List<Person> { ...

Как передать методу коллекции
Как предать методу Коллекции. public static string Vuvod(ArrayList o, ArrayList p) { int g=1, i=0; while(g!=int) { ...

Как достать значение из коллекции?
Здравствуйте. Есть TXT файл следующего содержания: qwe;1;ffv fvv;gfl;s vxcbx;wsdfs;STARf gsasq;fbgg;3 gdfb;4fsdf;gb

10
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
14.10.2016, 11:08
Цитата Сообщение от Чипс Посмотреть сообщение
я получаю анонимную переменную fi
Что-то я не пойму, как она анонимная если у нее имя есть?
Может ты имел ввиду "локальная"?
Цитата Сообщение от Чипс Посмотреть сообщение
а теперь я ХОЧУ использовать эту коллекцию в методе другого класса
А ты для своего класса сделай свойство и в нее коллекцию наполняй.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
14.10.2016, 11:33
Чипс, термина "анонимная коллекция" не существует. С помощью var объвляются неявно типизированные локальные переменные. То есть тип у них есть, просто вместо его явного указания мы просим компилятор самостоятельно установить тип переменной. В данном случае переменная fi имеет тип IEnumerable<FileInfo> потому что именно такой тип возвращает DirectoryInfo.EnumerateFiles(). Теперь должно быть понятно что раз известен тип переменной, то понятно какой тип указывать при передаче в другой метод.

Добавлено через 2 минуты
Советую еще прочитать Неявно типизированные локальные переменные (Руководство по программированию в C#) и аналогичную главу в любой книге по C#
1
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094
14.10.2016, 12:02  [ТС]
Согласен, немножечко в терминологии запутался, но в любом случаи вы поняли что я имел виду =)

Ну хорошо, в данном случаи действительно известен тип переменной fi, но всё таки, если я продолжаю объявлять переменную через var и получаю неявно типизированную локальную переменную содержащую некое перечисление, то вопрос всё ровно не исчезает, как мне вытащить это самое перечисление из этой переменной и передать его методу другого класса, не создавая при этом отдельный класс?

Цитата Сообщение от Hikari Посмотреть сообщение
А ты для своего класса сделай свойство и в нее коллекцию наполняй.
Что вы имеете виду, не пойму =(
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
14.10.2016, 12:27
Чипс, что значит "вытащить перечисление"? Снова какие-то странные термины. Мы уже разобрались что переменная fi имеет тип IEnumerable<FileInfo>. Что мешает объявить метод принимающий аргумент этого типа?
C#
1
2
3
4
5
6
7
void ProcessFiles(IEnumerable<FileInfo> files)
{
    foreach (FileInfo info in files)
    {
        // ..
    }
}
Добавлено через 1 минуту
Цитата Сообщение от Чипс Посмотреть сообщение
если я продолжаю объявлять переменную через var и получаю неявно типизированную локальную переменную содержащую некое перечисление
Пойми одну простую вещь - между объявлением с явным указанием типа и с помощью var нет никакой принципиальной разницы.
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
14.10.2016, 12:57
Цитата Сообщение от Чипс Посмотреть сообщение
Ну хорошо, в данном случаи действительно известен тип переменной fi, но всё таки, если я продолжаю объявлять переменную через var и получаю неявно типизированную локальную переменную содержащую некое перечисление, то вопрос всё ровно не исчезает, как мне вытащить это самое перечисление из этой переменной и передать его методу другого класса, не создавая при этом отдельный класс?
Сообщение от Hikari А ты для своего класса сделай свойство и в нее коллекцию наполняй.
Что вы имеете виду, не пойму =(
Все же в начале лучше изучить хотя бы основы ООП, а затем уже переходить к написанию таких программ, иначе вы долгое время будите топтаться на месте. Практика обязательно нужна и все начинали с костылей и "авторских велосипедов", но нужно учить матчасть иначе беда. Вам сейчас напишут решение, вы скопируете, но не будите понимать принцип его действия. Смысл? Уверен, что и этот ваш код вы откуда-то взяли
0
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094
14.10.2016, 14:54  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
fi имеет тип IEnumerable<FileInfo>.
переменная fi не имеет тип IEnumerable<FileInfo> так как я объявил её через VAR, а следовательно она стала неявно типизированной.
В этой неявно типизированной переменной находиться нужная мне коллекция содержащая имена файлов, как мне "достать" эту коллекцию от туда и передать в метод другого класс, при это не создавая специально для этого класс?

Самое очевидное что можно сделать это создать коллекцию IList<string> qwerty и в цикле foreach перегнать в него содержимое коллекции fi и уже потом передать его дальше, но я хочу избежать момента.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.IO;
using System.Collections;
using System.Text;
using System.Collections.Generic;
 
class clWork_with_csv_file
{
    static void Main()
    {
        string path_for_file = "C:\\test";
 
        DirectoryInfo Dir_in = new DirectoryInfo(path_for_file);
 
        IList<string> qwerty = new List<string>();
 
        foreach (var fi in Dir_in.EnumerateFiles("*.xls?"))
        {
            qwerty.Add(fi.Name);        
        }
       
 
        Console.WriteLine("Ready!");
        Console.ReadKey();
    }
}
Вот теперь я могу передать коллекция qwerty методу другого класса.
Но вся проблема как раз в том что мне пришлось её сделать.

Давайте представим другую ситуацию...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.ComponentModel;
using System.Linq;
 
class Create_table
{
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
 
    public Create_table(string q, string w, string e)
    {
        A = q; B = w; C = e;
    }
}
 
 
class go_go
{
    static void Main()
    {
        Create_table[] test_table = { new Create_table ( "1", "2", "3" ),
                                      new Create_table ( "4", "5", "6" ),
                                      new Create_table ( "7", "8", "9" )};
 
        var qwery_4_1 = from J1s in test_table
                        select new { J1s.A, J1s.B };
 
        foreach (var i in qwery_4_1) ;
 
        Console.WriteLine("Ready");
 
    }
}
Теперь у меня есть неявно типизированная переменная qwery_4_1 КАК мне передать её методу другого класса?
Не создавая при этому отдельный класс для неё.
0
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
14.10.2016, 15:03
Цитата Сообщение от Чипс Посмотреть сообщение
переменная fi не имеет тип IEnumerable<FileInfo> так как я объявил её через VAR
msvs c тобой не согласна.


предлагаю более детально ознакомится, что же такое неявная типизация.
0
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094
14.10.2016, 15:09  [ТС]
Цитата Сообщение от jr_ Посмотреть сообщение
msvs c тобой не согласна.
Ну ладно, чёрт с ней, а как насчет ответа на второй вопрос?
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
14.10.2016, 16:48
Лучший ответ Сообщение было отмечено Чипс как решение

Решение

Чипс,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
static void Main()
{
    var items = Enumerable.Range(0, 10)
        .Select(i => new { MyValue = i });
 
    Method1(items);
    Method1(items.Select(item => item.MyValue.ToString()));
    Method2(items);
    Method3(items);
 
    Console.ReadLine();
}
 
// Для работы с коллекцией
static void Method1<T>(IEnumerable<T> Collection)
{
    Console.WriteLine(Collection.Count());
}
 
// Можно указать частные случаи
static void Method1(IEnumerable<string> StringCollection)
{
    Console.WriteLine(string.Join(" ", StringCollection));
}
 
// Для работы с элементами через рефлексию
static void Method2<T>(IEnumerable<T> Collection)
{
    var prop = typeof(T).GetProperty("MyValue");
    Console.WriteLine(string.Join(" ", Collection.Select(item => prop.GetValue(item))));
}
 
// Для работы с элементами (Если совсем все плохо)
static void Method3(IEnumerable<dynamic> Collection)
{
    Console.WriteLine(string.Join(" ", Collection.Select(item => item.MyValue)));
}
1
83 / 61 / 17
Регистрация: 21.08.2015
Сообщений: 1,094
17.10.2016, 17:07  [ТС]
Большое спасибо, буду разбираться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2016, 17:07
Помогаю со студенческими работами здесь

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

Как получить список вместо коллекции
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Как сделать массив double из коллекции?
Есть код который ищет определенную подстроку в строке по индексу. class Program { //No. Time Source ...

Как переписать элемент в коллекции List?
Здраствуйте. Как переписать элемент, вот у меня есть коллекция в которую мы добавляем 3 элемента со значениями &quot;a&quot;,...

Как проверить, существует ли элемент в коллекции?
Есть List класса tablobj ( код класса ниже). class tablobj { public string category { get; set; } public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru