2013-04-25 56 views
0

獲取一個讓我難倒的錯誤。我假設它的東西簡單,但似乎無法推測這一個,這是導致該錯誤代碼:無法投入「System.DateTime」類型的對象來鍵入「System.String」

if ((string) _nullableDateTimePicker1.Value != string.Empty && _nullableDateTimePicker1.Value != null) { 
    _nullableDateTimePicker1.Value = null; 
} 

當在我的窗戶形式的搜索按鈕點擊,這是我得到彈出:

Unable to cast object of type 'System.DateTime' to type 'System.String'.

回答

1

看來_nullableDateTimePicker1的可空類型實例的類型是DateTime,它不是字符串;您需要與DateTime進行比較或將其轉換爲字符串。

所以,最簡單的意義:

_nullableDateTimePicker1.Value.ToString() != string.Empty 

然而,謹防不檢查HasValue的危險,因爲這將導致NullReferenceException如果Valuenull;所以,你的支票有點倒退。

即使如此,如果它不是null,你就會有一個DateTime.MinValue,所以ToString不會返回一個空字符串。因此,檢查null上可空的東西,如果沒有null,比較DateTime.MinValue(除非在你的代碼,這意味着它可能有一個不同「默認」是一個怪癖明確。

+0

這將始終如此,因爲'DateTime'始終有一個值(如果不爲空)。 – 2013-04-25 15:11:04

+0

@DavidS。起初,我誤解了您的評論,感謝您的意見。 – 2013-04-25 15:12:50

+0

是的,但是如果'_nullableDateTimePicker1.HasValue',則檢查'_nullableDateTimePicker1.Value.ToString()!= string.Empty'將始終爲真。 – 2013-04-25 15:12:50

0

if ((string) _nullableDateTimePicker1.Value .....

也許,_nullableDateTimePicker1.Value返回DateTime。正如該消息所解釋的,您不能直接將DateTime投射到string

0

在這部分(string) _nullableDateTimePicker1.Value != string.Empty你試圖將值轉換爲字符串。但是ValueDateTime。這個if的第二部分就夠了。

0
(string) _nullableDateTimePicker1.Value 

拋出異常當_nullableDateTimePicker1爲null。

試圖檢查,如果值不爲空時,不要使用(string)

0

它看起來像你的_nullableDateTimePicker1對象是Nullable<DateTime>DateTime?),在這種情況下,您會收到此錯誤,因爲您無法將其轉換爲字符串。

(string) _nullableDateTimePicker1.Value 

看起來你只是想確保它有一個有效的DateTime,在這種情況下,你只需要做空檢查。不知道你想要做什麼,這是我的建議。

0

此代碼應工作:

if (_nullableDateTimePicker1.Value != null && Convert.ToString(_nullableDateTimePicker1.Value) != string.Empty) { 
    _nullableDateTimePicker1.Value = null; 
} 
0

DateTimePicker.Value返回DateTime類型,你可以不投它的字符串,你需要的是CONVER字符串。

string dateTime = _nullableDateTimePicker1.Value.ToString(); 

因此您的代碼將是:

string dateTime = _nullableDateTimePicker1.Value.ToString(); 
if (!string.IsNullOrEmpty(dateTime)) 
{ 
    dateTime = null; 
} 

我不知道有關設置的DateTimePicker值設置爲null。

相關問題