如何将此代码从VB.NET转换为C#? (翻译不工作)

时间:2011-12-21 15:12:31

标签: c# vb.net timespan code-translation

我在将这段代码从VB.NET转换为C#时遇到了问题。这段代码应该从数据库中一列的每个单元格中获取一个值(让我们称之为column1,它的数据类型是datetime,因此,格式如下:12/19/2011 7:42:30 PM),并在gridview控件中的每一行中找到Datetime.Now与column1的值之间的时间跨度。有些人给了我这个在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)'的最佳重载方法匹配有一些无效的参数 -Argument 1:无法从'object'转换为'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 个答案:

答案 0 :(得分:3)

我认为问题是你把你的方法叫做TimeSpan。尝试将其称为其他内容(例如ToTimeSpan)。

答案 1 :(得分:2)

你似乎对调用代码有问题而不是函数本身。

错误表示您尝试将object类型的值传递给函数TimeSpan。但该函数的唯一参数是DateTime类型。

当你显示调用函数TimeSpan的代码时,我可以给你建议要改变的内容。

但正如其他人所说,你的功能和参数的命名非常具有误导性。

修改

好的,现在我看到你的通话代码了。您必须将Eval("column1")的值转换为DateTime:

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

答案 2 :(得分:2)

代码转换为(带有合理的重命名):

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

你应该做内联,不需要IMO方法。

答案 3 :(得分:2)

我认为问题可能是Eval(“column1”)正在返回一个对象而你的TimeSpan方法不接受对象,它接受DateTimes。转换到DateTime,我认为它可能会开始工作。

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

答案 4 :(得分:1)

您需要将输入文本信息转换为datetime :)。 否则,你可以使用你的方法TimeSpan ...它的存根,你是对的;)