1. C# / Говнокод #13705

    +134

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 30 Августа 2013

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

    • Название метода ConvertToString, а возвращает DataTable.
      Ответить
      • Глядя на поломанную семантику, можно невозбранно представлять жизненный цикл и рефакторинг метода.
        > theArray
        А есть какой-то нейминг конвеншн, чтоб регламентировал что-то вроде такого:
        aMyShittyClass - описание класса
        theMyShittyClass - реализация класса
        ?
        Ответить
        • Скорее aClass - класс, theClass - экземпляр класса )
          Ответить
          • именно, экземпляр, декларативщина мозг проела :)
            Ответить
    • (string)values.GetValue(j, i).ToString()

      не, ну а вдруг?
      Ответить
    • 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.
        Ответить
        • string.ToSrtring?)))
          Ответить
          • и не только)
            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;
              }
      Ответить

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