0

このコードを VB.NET から C# に変換する際に問題が発生しています。このコードは、データベース内の列の各セルから値を取得することになっています (これを column1 と呼びましょう。データ型は datetime なので、形式は次のようになります: 12/19/2011 7:42:30 PM)。そして、Datetime.Now と gridview コントロールの各行の 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# に変換してアプリケーションを実行しようとすると、次の 2 つのエラーが発生します。

- '_Default.TimeSpan(System.DateTime)' に最適なオーバーロードされたメソッド マッチには無効な引数があります - 引数 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;
}
4

5 に答える 5

3

問題は、メソッド TimeSpan を呼び出すことだと思います。別の名前を付けてみてください (ToTimeSpan など)。

于 2011-12-21T15:14:12.227 に答える
2

関数自体ではなく、呼び出しコードに問題があるようです。

objectエラーは、 type の値をfunctionに渡そうとしたことを示していますTimeSpan。しかし、その関数の唯一のパラメーターは typeDateTimeです。

関数を呼び出すコードを表示すると、TimeSpan何を変更すればよいかアドバイスできます。

しかし、他の人が示唆したように、関数とパラメーターの命名は非常に誤解を招くものです。

編集

わかりました、今私はあなたの呼び出しコードを見ます。Eval("column1")の値を DateTimeにキャストする必要があります。

<%# TimeSpan(Eval("column1") == System.DBNull.Value 
                     ? DateTime.Now
                     : (DateTime)Eval("column1")) %>
于 2011-12-21T15:16:58.637 に答える
2

コードは次のように変換されます (賢明な名前変更を使用)。

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

これはインラインで行う必要があり、メソッド IMO は必要ありません。

于 2011-12-21T15:17:13.817 に答える
2

おそらく問題は、 Eval("column1") がオブジェクトを返していることと、TimeSpan メソッドがオブジェクトを受け入れず、DateTimes を受け入れることだと思います。DateTime への変換を行うと、機能し始める可能性があると思います。

すなわち

<%# TimeSpan(IIf(IsDBNull(Eval("column1")), DateTime.Now,Ctype(Eval("column1"), DateTime))) %>
于 2011-12-21T15:17:33.530 に答える
1

入力テキスト情報をdatetimeにキャストする必要があります:)。それ以外の場合は、メソッド TimeSpan を使用できます...それはスタブであり、あなたは正しいです;)

于 2011-12-21T16:11:24.627 に答える