2011-12-21 3 views
0

このコードをVB.NETからC#に翻訳する際に問題があります。このコードは、データベースの列の各セルから値を取ることになっています(column1と呼ぶ、データ型はdatetimeなので、形式はこのようです:12/19/2011 7:42:30 PM)。 Datetime.Nowとgridviewコントロールの各行のcolumn1の値の間のタイムスパンを検索します。それが動作このコードをVB.NETからC#に変換するには? (翻訳者が動作していません)

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#にそれを翻訳しようとすると:

<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> 

と分離コードのために:いくつかの男は私にVB.NETで完璧に動作します。このコードを与えました

- '_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; 
} 
+9

これを翻訳しようとしたC#コードは見えますか? – BoltClock

+3

その関数のパラメータの命名は信じられないほど誤解を招くようです。あなたは**開始時間**を過ぎて**持続時間**を返しています。 –

+4

名前は私の脳を傷つけます。 'Duration'と呼ばれる' DateTime'と、 'TimeSpan'と呼ばれるメソッドです。関数は 'Age'のように呼び出されるべきです。 – CodesInChaos

答えて

2

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

エラーは、タイプobjectの値を関数TimeSpanに渡そうとしています。しかし、その関数の唯一のパラメーターはタイプDateTimeです。

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

しかし、他の人が示唆するように、関数とパラメータの命名は非常にミスリーディングです。

EDIT

[OK]を、今私はあなたの呼び出し元のコードを参照してください。あなたは日時にEval("column1")の値をキャストする必要があります。

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

彼は呼び出し(タグ付きの最初のコードブロック)を表示しており、実際には型変換を行う必要があります。 – Chris

+0

@Chris:はい、今は私の眼鏡を持っています - 私はすでに私の答えを更新しています。ありがとう! – Jan

+0

ありがとう!私はそれを投げなければならないことを知らなかった、今それは完全に動作する! –

3

私はあなたのメソッドをTimeSpanと呼んでいると思います。他のもの(ToTimeSpanなど)を呼び出すようにしてください。

+3

コンパイラのエラーで何か言われています。私は 'TimeSpan'は誤解を招くことがあっても関数の正当な名前だと思います。 – Jan

2

コードは(賢明な名前の変更を含む)に変換します。あなただけのインライン行う必要があります

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

、IMO方法は必要ありません。

+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

すなわち

。 それ以外の場合は、メソッドTimeSpan ...を使用することができます。スタブとあなた;)

関連する問題