Как перевести этот код из VB.NET в C #?(переводчики не работают) - PullRequest
0 голосов
/ 21 декабря 2011

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

<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) есть недопустимый аргумент Аргумент 1: невозможно преобразовать объект в System.DateTime

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

Отредактировано: это код (в 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;
}

Ответы [ 5 ]

3 голосов
/ 21 декабря 2011

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

2 голосов
/ 21 декабря 2011

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

т.е.

<%# TimeSpan(IIf(IsDBNull(Eval("column1")), DateTime.Now,Ctype(Eval("column1"), DateTime))) %>
2 голосов
/ 21 декабря 2011

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

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

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

2 голосов
/ 21 декабря 2011

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

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

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

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

РЕДАКТИРОВАТЬ

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

<%# TimeSpan(Eval("column1") == System.DBNull.Value 
                     ? DateTime.Now
                     : (DateTime)Eval("column1")) %>
1 голос
/ 21 декабря 2011

вам нужно преобразовать введенную текстовую информацию в datetime :). В противном случае, вы можете использовать свой метод TimeSpan ... это заглушка, и вы правы;)

...