На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Универсальная функция вывода информации
    В функции
    ExpandedWrap disabled
          static void ShowResult(dynamic sArr, dynamic iArr1, dynamic iArr2, dynamic iArr3)
          {
            for (int i = 0; i < sArr.Length; i++)
            {
              Console.WriteLine("{0}\n{1}\t{2}\t{3}", sArr[i], iArr1[i], iArr2[i], iArr3[i]);
            }
            Console.WriteLine("\n ------------------------------------------ \n ");
          }
    естественно возникает ошибка, если sArr имеет тип List (тогда нужно sArr.Count). Можно использовать вместо for foreach, но тогда вывести несколько значений в одну строку (например для sArr, sArr1 и других) получится только, если ввести переменную i в цикле foreach и ее i++. Кроме того, хотелось бы сделать так, чтобы вывод значений был для массивов int, string и List int и string, при этом параметры функции были бы разными по типам, а их количество могло бы быть различным (например, от 1 до 5). Помогите, пожалуйста.
      Имхо, foreach использовать нельзя. Я в спесификации с шарп не встречал утверждения, что индексер и итератор обрабатывают элементы в одном и том же порядке.
      А чтобы понять, что хранится в переменной, надо использовать typeof.
        Цитата tumanovalex @
        естественно возникает ошибка, если sArr имеет тип List (тогда нужно sArr.Count). Можно использовать вместо for foreach, но тогда вывести несколько значений в одну строку (например для sArr, sArr1 и других) получится только, если ввести переменную i в цикле foreach и ее i++. Кроме того, хотелось бы сделать так, чтобы вывод значений был для массивов int, string и List int и string, при этом параметры функции были бы разными по типам, а их количество могло бы быть различным (например, от 1 до 5). Помогите, пожалуйста.

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

        В твоем же случае я думаю, достаточно использовать универсальные классы, универсальные методы, Универсальные методы и массивы
        Например вот так:
        https://ideone.com/uJblLY
        Скрытый текст
        ExpandedWrap disabled
          using System;
          using System.Collections.Generic;
           
          public class Test
          {
              public static void ShowResult<T1, T2>(ICollection<T1> arr1, ICollection<T2> arr2)
              {
                  foreach(var item in arr1)
                  {
                      Console.WriteLine(item);
                  }
                  foreach(var item in arr2)
                  {
                      Console.WriteLine(item);
                  }
              }
              public static void Main()
              {
                  List<string> list = new List<string>();
                  list.Add("dsafs1");
                  list.Add("dsafs2");
                  list.Add("dsafs3");
           
                  int[] array = new int[5] { 1, 2, 3, 4, 5 };
           
           
                  ShowResult<string, int>(list, array);
                  // your code goes here
              }
          }
        Сообщение отредактировано: Wound -
          Спасибо большое за ответы. Попробую использовать рекомендуемые подходы.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0217 ]   [ 17 queries used ]   [ Generated: 20.04.24, 01:43 GMT ]