Си диез / Говнокод #13705 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
public DataTable ConvertToString(Array values, int col_length, int row_length, int counter) {
            DataTable dt = new DataTable();
            string[] theArray = new string[col_length];
            if (row_length < counter)
                counter = row_length;
            for (int j = 1; j <= counter; j++) {
                for (int i = 1; i <= col_length; i++) {
                    if (j == 1) {
                        try {
                            dt.Columns.Add(values.GetValue(j, i).ToString().Replace('.', '_'));
                        } catch (NullReferenceException nre) {
                            dt.Columns.Add("F" + i);
                        }
                    } else if (values.GetValue(j, i) == null)
                        theArray[i - 1] = "";
                    else
                        theArray[i - 1] = (string)values.GetValue(j, i).ToString();
                }
                if (j != 1)
                    dt.LoadDataRow(theArray, true);

            }
            return dt;
        }

шедеврально, чтобы понять, есть ли значение в первой строке нужно словить NullReferenceException, а дальше можно проверить на != null
и так же (string)values.GetValue(j, i).ToString();

Запостил: Lokich Lokich, (Updated )

Комментарии (17) RSS

  • Название метода ConvertToString, а возвращает DataTable.
    Ответить
    • Глядя на поломанную семантику, можно невозбранно представлять жизненный цикл и рефакторинг метода.
      > theArray
      А есть какой-то нейминг конвеншн, чтоб регламентировал что-то вроде такого:
      aMyShittyClass - описание класса
      theMyShittyClass - реализация класса
      ?
      Ответить
        • именно, экземпляр, декларативщина мозг проела 🙂
          Ответить
  • if (values.GetValue(j, i) == null)
    theArray[i - 1] = "";
    else
    theArray[i - 1] = (string) values.GetValue(j, i).ToString();
    Вообще то ToString() от null вернет пустую строку, условие лишнее
    Ответить
    • вообще нет.
      class Program {
              static void Main(string[] args) {
                  string s = null;
                  Console.WriteLine(s.ToString());
              }
          }

      дает ошибку компиляции =)
      Use of unassigned local variable 's'

      этот массив был получен в этом методе
      public DataTable GetRecords2(Excel._Workbook wbook, string wsname) {
      
                  object oMissing = System.Reflection.Missing.Value;
                  object isVisible = false;
                  object readOnly = false;
      
                  Excel.Worksheet ws1 = wbook.Worksheets[wsname];
                  DataTable dt = new DataTable();
                  Excel.Range range = ws1.UsedRange.Rows;
                  System.Array myvalues = (System.Array)range.Cells.Value;
                  dt = ConvertToString(myvalues, range.Columns.Count, range.Rows.Count, range.Rows.Count);
                  return dt;
              }

      просто автор этого ГК просто совершенно не умеет работать со типами данных. когда он занимался онанизмом разработкой веб интерфейса, он использовал вебслужбу. короче получилось так, что сериализатор в JSON, который там использовали все остальные ему не понравился, он его сломал к херам так, что он совершенно не понимал чисел, только строки. ну и как-то получилось так, что после этого он один занимался проектом, и не обламывался в принципе-то )) через какое-то время, он ушел в отпуск, и в его отсутствие меня посадили подкрутить там рюши всякие. у меня волосы на жопе зашевелились, когда я увидел, что у него все в строках... даты, числа, xml.
      Ответить
        • и не только)
          if (folderBrowserDialog1.ShowDialog().ToString() == "OK") {
                          textBox1.Text = folderBrowserDialog1.SelectedPath.ToString();
          
                      }

          ShowDialog() возвращает enum, а SelectedPath и так уже string.
          человек с красным дипломом закончил МГУ, получил MCP, и сейчас работает руководителем группы разработки.
          Ответить
          • уж очень человек строки любит)

            универ дает по минимуму знаний. самообразованием нужно заниматься
            Ответить
      • static void Main()
        {
        object a = null;
        Console.WriteLine((string)a+"hh");
        Console.Read();
        }
        Ответить
        • я может чего-то не понимаю, но все же.
          static void Main(string[] args) {
                      List<object> objList = new List<object>();
                      string s = null;
                      objList.Add(DateTime.Now);
                      objList.Add(s);
                      objList.Add(0);
                      Console.WriteLine("Types..");
                      foreach (object o in objList) {
                          try {
          
                              Console.WriteLine(o.GetType());
          
                          } catch (Exception ex) {
                              Console.WriteLine(ex.Message);
                          }
                      }
                      Console.WriteLine("\nValues..");
                      foreach (object o in objList) {
                          try {
          
                              Console.WriteLine(o.ToString());
          
                          } catch (Exception ex) {
                              Console.WriteLine(ex.Message);
          
                          }
                      }
                      
                  }


          просто объекты в этом массиве приведены к object, но не исключено, что может быть и string, который ссылается на null
          Ответить
            • Проблема в том, что null не может выдать ToString(), но его можно привести к string (string)null = ""

              А большенство обьектов не поддерживают (string)obj увы . Нет общности
              Ответить
      • так как то?
        public DataTable GetRecords2(_Workbook wbook, string wsname)
                {
                    var range = wbook.Worksheets[wsname].UsedRange.Rows;
                    return ConvertToDataTable(range.Cells.Value, range.Columns.Count, range.Rows.Count);
                    
                }
                public DataTable ConvertToDataTable(Array values, int colLength, int rowLength)
                {
                    var dt = new DataTable();
                    var theArray = new string[colLength];
                    
                    for (var i = 1; i <= colLength; i++)
                        dt.Columns.Add((values.GetValue(1, i) == null)
                                           ? "F" + i
                                           : values.GetValue(1, i).ToString().Replace('.', '_'));
        
                    for (var j = 2; j <= rowLength; j++)
                    {
                        for (var i = 1; i <= colLength; i++)
                            theArray[i - 1] = (string)values.GetValue(j, i);
                        dt.LoadDataRow(theArray, true);
                    }
                    return dt;
                }
        Ответить
  • Немного рефакторинга (суть метода не смотрел, только вид поменял)
    public DataTable ConvertToDataTable(Array values, int colLength, int rowLength, int counter)
            {
                var dt = new DataTable();
                var theArray = new string[colLength];
                
                if (rowLength < counter) counter = rowLength;
    
                for (var i = 1; i <= colLength; i++)
                    dt.Columns.Add((values.GetValue(1, i) == null)
                                       ? "F" + i
                                       : values.GetValue(1, i).ToString().Replace('.', '_'));
    
                for (var j = 2; j <= counter; j++)
                {
                    for (var i = 1; i <= colLength; i++)
                        theArray[i - 1] = values.GetValue(j, i).ToString();
                    dt.LoadDataRow(theArray, true);
                }
                return dt;
            }
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8