2011-12-21 4 views
0

У меня возникли проблемы с переводом этого кода на C# из VB.NET. Этот код должен принимать значение из каждой ячейки столбца в базе данных (назовем его column1, это тип данных datetime, поэтому формат выглядит примерно так: 12/19/2011 7:42:30 PM), и найдите промежуток времени между Datetime.Now и этим значением столбца1 для каждой строки в элементе управления gridview. Какой-то парень дал мне этот код, который отлично работает в VB.NET:Как перевести этот код с VB.NET на C#? (переводчики не работают)

<asp:TemplateField HeaderText="TimeSpan"> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# TimeSpan(IIf(IsDBNull(Eval("column1")), DateTime.Now,Eval("column1"))) %>'></asp:Label> 
      </ItemTemplate> 
</asp:TemplateField> 

И для: коды

Protected Function TimeSpan(ByVal Duration As DateTime) As TimeSpan 
     Dim date1 As DateTime = Duration 
     Dim date2 As DateTime = DateTime.Now 
     Dim ts As TimeSpan = (date2 - date1) 
     Return ts 
    End Function 

И в VB.NET это работает, но когда я пытаюсь перевести его на C# , и запустите мое приложение, я получаю следующие две ошибки:

-Выбор перегруженного метода для '_Default.TimeSpan (System.DateTime)' имеет некоторый недопустимый аргумент -Argument 1: невозможно преобразовать из 'объекта' в ' System.DateTime '

Может кто-нибудь, пожалуйста, помогите мне с этим? Перевод, который работает для кода? Или еще один способ сделать то, что я хочу сделать? Благодаря

Edited: Это код (в C#, который я получаю с помощью переводчиков), который на самом деле код, который дает мне исключения, которые я упоминал раньше:

<asp:TemplateField HeaderText="TimeSpan"> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# TimeSpan((Information.IsDBNull(Eval("column1")) ? DateTime.Now : Eval("column1"))) 
%>'></asp:Label> 
      </ItemTemplate> 
</asp:TemplateField> 

И для кода позади :

protected TimeSpan TimeSpan(DateTime Duration) 
{ 
    DateTime date1 = Duration; 
    DateTime date2 = DateTime.Now; 
    TimeSpan ts = (date2 - date1); 
    return ts; 
} 
+9

Можем ли мы увидеть код C#, который вы пытались перевести на него? – BoltClock

+3

Параметр, обозначающий эту функцию, кажется невероятно обманчивым. Вы начинаете ** время начала ** и возвращаете ** продолжительность **. –

+4

Именование причиняет боль моему мозгу. 'DateTime' называется' Duration' и метод под названием 'TimeSpan'. Функция должна называться чем-то вроде «Age». – CodesInChaos

ответ

2

У вас, похоже, проблема с кодом вызова, а не самой функцией.

Ошибка: вы пытаетесь передать значение object вашей функции TimeSpan. Но единственным параметром этой функции является тип DateTime.

Когда вы показываете код, вызывающий функцию TimeSpan, я могу дать вам совет, что изменить.

Но, как предложили другие, наименования вашей функции и параметра очень промахиваются.

EDIT

Хорошо, теперь я вижу свой код вызова. Вы должны бросить значение Eval("column1") в DateTime:

<%# TimeSpan(Eval("column1") == System.DBNull.Value 
        ? DateTime.Now 
        : (DateTime)Eval("column1")) %> 
+0

он показал вызов (первый блок кода с тегами), и ему действительно нужно сделать какое-то преобразование типа на нем. – Chris

+0

@ Крис: Да, теперь у меня есть очки - я уже обновил свой ответ. Благодаря! – Jan

+0

Большое вам спасибо! Я не знал, что должен был бросить его, теперь он отлично работает! –

3

Я думаю, проблема в том, что вы называете свой метод TimeSpan. Попробуйте называть его чем-то другим (например, ToTimeSpan).

+3

Ошибка компилятора говорит что-то еще. Я думаю, что 'TimeSpan' является допустимым именем для функции, даже если она вводит в заблуждение. – Jan

2

код переводится (с разумным переименовывать):

public TimeSpan GetDuration(DateTime start) 
{ 
    return DateTime.Now - start; 
} 

который вы должны просто делать рядный, нет необходимости в методе ИМО.

+0

, работающий над встроенным .. –

+1

Действительно? Похоже, что человек написал код C#, а компьютер перевел его на VB.NET ... – zmbq

+0

Просто измените имя метода, чтобы избежать ошибок ... но это перевод. – Romias

2

Я думаю, проблема в том, что Eval ("column1") возвращает объект objet, и ваш метод TimeSpan не принимает объекты, он принимает DateTimes. Сделайте преобразование в DateTime, и я думаю, что он может начать работать.

т.е.

<%# TimeSpan(IIf(IsDBNull(Eval("column1")), DateTime.Now,Ctype(Eval("column1"), DateTime))) %> 
+0

Вы правы, мне просто нужно было бросить его. Спасибо чувак –

1

вы должны отдать свой ввод текстовой информации в DateTime :). В противном случае вы можете использовать свой метод TimeSpan ... он незаметен и вы правы;)

 Смежные вопросы

  • Нет связанных вопросов^_^