2011-04-15 39 views
2

在VS2010的VB.NET 4.0項目時,IDE把一個綠線的最後一行下下面的代碼:DateTime.Today錯誤

Dim cityLocal As DateTime 
cityLocal = externalFunction() 
cityLocal.Today() 

建議的代碼替換爲更新「cityLocal」與'日期'。原因是: 通過實例訪問共享成員,常量成員,枚舉成員或嵌套類型;符合條件的表達式將不會被評估。

但它編譯並確實工作。這只是VS2010中的一個錯誤?

+0

我懷疑你目前的代碼是否符合你的期望。你想在這裏做什麼? – 2011-04-15 16:36:00

+0

它正在執行我想要的任務,基本上我只想在午夜返回的日期。我只是想弄清楚這個警告。 – Josh 2011-04-15 18:29:51

回答

3

今天是共享成員,因此不應該(但可以)通過DateTime實例更改您的代碼來訪問。

DateTime.Today

雖然Visual Studio中給你的建議糾正「錯誤」是逸岸編譯器警告,警告你,有沒有必要爲一個實例訪問共享成員。您會發現它未在錯誤列表中列爲錯誤。這就是編譯正確的原因。

Visual Basic語言規範規定

9.2.4共享方法

的共用修飾符指示方法 是一個共享的方法。共享方法 不適用於某個類型的特定實例,可以直接從類型調用 ,而不是通過 類型的特定實例調用 。但是,使用 實例來限定共享方法是有效的。

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=01EEE123-F68C-4227-9274-97A13D7CB433:在警告

的更多信息可以在文檔中找到。

http://msdn.microsoft.com/en-us/library/y6t76186.aspx

+0

那麼我應該創建一個與今天的方法具有相同行爲的我自己的方法嗎?在實例中使用靜態方法的缺點是什麼? – Josh 2011-04-15 17:59:13

+0

@Josh。你想從'cityLocal.Today()'看到什麼?我認爲你*可能*想要'cityLocal.Date'。'日期'是'cityLocal'中的日期減去時間部分(或技術性的午夜)。 DateTime.Today()是**今天的日期**,不管任何DateTime變量。 – Jim 2011-04-15 21:31:13

+0

@Jim,謝謝。這正是我所期待的。 – Josh 2011-04-18 13:03:32

0

Date.Today是(在VB.NET Shared)特性的static。您可以從實例中使用它,因爲編譯器知道進行適當的調用,但它不是預期的使用模式,從實例直接使用這種模式是不必要的也是不希望的。

作爲一個靜態變量,您應該使用Date.Today而不是variable.Today