2013-08-26 116 views
0

while循環中的ra.Value有時是DateTime類型,不幸的是,.ToString()方法不足以將其轉換爲字符串。我應該更改我的代碼,以識別ra.Value是DateTime類型並將其轉換爲String。現在我有一個例外,即從'DateTime'類型到'String'類型的轉換無效。如何將DateTime轉換爲字符串

With ro.Attributes.GetEnumerator 
    While .MoveNext 
     Dim ra As ReportAttribute = CType(.Current, ReportAttribute) 
     Dim lstrColumnReportObj As Integer = ra.Column 
     Dim lstrValueReportObj As String = ra.Value.ToString() 
     lstrParTable(lstrColumnReportObj) = lstrParTable(lstrColumnReportObj) + lstrValueReportObj 
    End While 
End With 

謝謝。

+8

*不幸的是.ToString()方法不足以將其轉換爲字符串*這沒有意義。 'ToString()'返回一個'String'。總是。 – sloth

+2

只需一眼,我會說這可能是你的問題的地方:'lstrParTable(lstrColumnReportObj)+ lstrValueReportObj'。你確定'lstrParTable(lstrColumnReportObj)'不是DateTime嗎?您不能連接日期時間和字符串。 –

+0

@DominicKexel根據你的說法,那可能是什麼問題?我真的不明白爲什麼它不起作用,並給我這種例外。 –

回答

0

簡單的解決方案,你可能正在尋找的是:

With ro.Attributes.GetEnumerator 
    While .MoveNext 
     Dim ra As ReportAttribute = CType(.Current, ReportAttribute) 
     Dim lstrColumnReportObj As Integer = ra.Column 
     Dim lstrValueReportObj As String = Nothing 
     If TypeOf ra.Value Is Date Then 
      lstrValueReportObj = ra.Value.ToString("d MMM yyyy") 
     Else 
      lstrValueReportObj = ra.Value.ToString() 
     End If 
     lstrParTable(lstrColumnReportObj) = lstrParTable(lstrColumnReportObj) + lstrValueReportObj 
    End While 
End With 

然而,這並不嫌不好的做法,你可能要重新考慮你的整體設計。通常,當你必須開始對某些類型的特定邏輯進行放置時,這通常表明你可以以更好的方式做到這一點。例如,當你開始需要其他類型的自定義格式時會發生什麼。一旦你有一些例外,它會變得笨重,代碼會變得脆弱(容易出錯)。

此外,我覺得有義務提到,匈牙利符號在.NET中是不鼓勵的。如果你被僱主要求使用它,那很好,但除此之外,我建議你閱讀official Microsoft naming guidelines

+0

謝謝你的回覆現在我有錯誤味精「表達式的字符串類型不能是類型的日期」,但如果ra.Value是一個字符串總是爲什麼我有第一個錯誤? –

+0

我不確定。什麼是ReportAttribute類型?這是你在代碼中定義的東西,或者是來自某種第三方庫的東西。 –

+0

它來自於第三方庫 –