none
Не удается найти перегрузку для "ToString" и количества аргументов: "1" RRS feed

  • Вопрос

  • Доброе утро!

    Не могу понять что случилось. Есть вот такой код, он всегда работал нормально, но вдруг сегодня стал выдавать ошибку(жирным выделены строки, вызывающие ошибку):

    #Генерирование отчета в HTML для тела письма
    $html = ""
    $html = "<center><h2>Отчет о выполненных задачах Sybase, " + (get-date).tostring("f") +"</h2></center>
    <center><table border = '1' width = '700'>
      <tr>
        <td align='center' bgcolor='#2ECCFA'> № </td>
        <td align='center' bgcolor='#2ECCFA'> Сервер </td>
        <td align='center' bgcolor='#2ECCFA'> Имя задания </td>
        <td align='center' bgcolor='#2ECCFA'> ID задания </td>
        <td align='center' bgcolor='#2ECCFA'> Состояние </td>
        <td align='center' bgcolor='#2ECCFA'> Коды ошибок </td>
        <td align='center' bgcolor='#2ECCFA'> Время запуска </td>
        <td align='center' bgcolor='#2ECCFA'> Время окончания </td>
        <td align='center' bgcolor='#2ECCFA'> Размер в байтах </td>
      </tr>"
    $arr | foreach{
        $i = 0}{
        $i++
        #Сортировка по ошибкам и статусу задачи
        if(($_.sjob_exit_code -ne 0)-or ($_.sjob_user_code -ne 0) -or ($_.sjob_atat_error -ne 0) -or ($_.sjob_os_code -ne 0) -or ($_.sjob_state -ne "C2")){
            $error_state = 1
            $html += "<tr>
            <td align='center' bgcolor='#FF0000'>" + $i + "</td>
            <td align='center' bgcolor='#FF0000'>" + $_.sjob_server + "</td>
            <td align='center' bgcolor='#FF0000'>" + $_.sjob_jobname + "</td>
            <td align='center' bgcolor='#FF0000'>" + $_.sjob_id + "</td>
            <td align='center' bgcolor='#FF0000'>" + $_.sjob_state + "</td>
            <td align='center' bgcolor='#FF0000'>" + $_.sjob_exit_code,$_.sjob_user_code,$_.sjob_atat_error,$_.sjob_os_code + "</td>
            <td align='center' bgcolor='#FF0000'>" + $_.sjob_start.ToString("G") + "</td>
            <td align='center' bgcolor='#FF0000'>" + $_.sjob_end.ToString("G") + "</td>
            <td align='center' bgcolor='#FF0000'>" + $_.sjob_size + "</td>
            </tr>"
            }
            else{$html += "<tr>
            <td align='center'>" + $i + "</td>
            <td align='center'>" + $_.sjob_server + "</td>
            <td align='center'>" + $_.sjob_jobname + "</td>
            <td align='center'>" + $_.sjob_id + "</td>
            <td align='center'>" + $_.sjob_state + "</td>
            <td align='center'>" + $_.sjob_exit_code,$_.sjob_user_code,$_.sjob_atat_error,$_.sjob_os_code + "</td>
            <td align='center'>" + $_.sjob_start.ToString("G") + "</td>
            <td align='center'>" + $_.sjob_end.ToString("G") + "</td>
            <td align='center'>" + $_.sjob_size + "</td>
            </tr>"
            }
      }{
      Remove-Variable i}

    а ошибка вот такая:

    Не удается найти перегрузку для "ToString" и количества аргументов: "1".
    строка:22 знак:9
    +         $html += "<tr>
    +         ~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodCountCouldNotFindBest

    Если убрать метод ToString, то все ок, но мне нужен вывод в другом формате.

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

    Из-за чего вдруг этот код стал вызывать такую ошибку и чего  вдруг перегрузка вылезла?


    • Изменено SteFFun 4 июля 2013 г. 7:18

Ответы

  • $_.sjob_star | gm  - должен возвращать тип DateTime,т.к. тип у этого объекта другой,то собственно и возникает ошибка

    PS > "test".ToString("G")
    Cannot find an overload for "ToString" and the argument count: "1".
    At line:1 char:1
    + "test".ToString("G")
    + ~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodCountCouldNotFindBest
    
    PS > (Get-Date).ToString("G")
    04.07.2013 11:49:20

    • Помечено в качестве ответа SteFFun 4 июля 2013 г. 8:42
    Отвечающий

Все ответы

  • $_.sjob_star | gm  - должен возвращать тип DateTime,т.к. тип у этого объекта другой,то собственно и возникает ошибка

    PS > "test".ToString("G")
    Cannot find an overload for "ToString" and the argument count: "1".
    At line:1 char:1
    + "test".ToString("G")
    + ~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodCountCouldNotFindBest
    
    PS > (Get-Date).ToString("G")
    04.07.2013 11:49:20

    • Помечено в качестве ответа SteFFun 4 июля 2013 г. 8:42
    Отвечающий
  • что такое "sjob_start" и "sjob_end"? тип какой?
  • IsPublic IsSerial Name                                     BaseType                     
    -------- -------- ----                                     --------                     
    True     True     DateTime                                 System.ValueType   
  • Да верно. 

    Была просто загвоздка, в одном из элементов массива свойство sjob_end было пустым и поэтому вместо типа DateTime был тип

    IsPublic IsSerial Name                                     BaseType                     
    -------- -------- ----                                     --------                     
    True     True     DBNull                                   System.Object  

    не сразу просто стало ясно, т.к. элементов много.

    Всем спасибо. =)

     
    • Изменено SteFFun 4 июля 2013 г. 8:43 апвкепвапув