2011-03-08 124 views
1

我想修改一個系統方法來添加一個條件。覆蓋系統方法

的方法是

System.Boolean.Parse(String value) 

我想它支持其他值,例如「1.000」以及「0.000」。

由於某種原因,DataGridViewCheckBoxCell正在拋出一個關於「0.000不是布爾的有效值」的異常。這是從DataGridView的內部代碼中調用的...因此我無法修改該呼叫:/

我沒有把這些值放在任何地方,因爲我的TrueValue是「true」,我的FalseValue是「false」。

所以這就是爲什麼我想重寫此方法!

這樣做的好方法?

+3

細胞告訴你真相。 0.000不是布爾的有效值。你應該去了解這個價值如何到達那裏。 – 2011-03-08 19:49:38

+0

難道你不能只是相應地改變你的'TrueValue'和你的'FalseValue'嗎? – 2011-03-08 20:15:00

+0

爲了進一步強調John Saunders的觀點:如果你不知道「0.000」來自哪裏,那麼你的程序中有一個錯誤。你有不好的數據。您可以修復該錯誤以防止不良數據進入系統,也可以編寫一大堆代碼,用於在數據進入系統後對其進行補償。您的選擇,但我的經驗是,防止不良數據是這兩種選擇中較容易的。 – 2011-03-08 20:49:59

回答

3

由於聲明爲static,因此無法重寫此方法。

在它周圍寫一個包裝(或者在Boolean上的擴展方法),它將實現您的支票以及他們是否通過委託。

+0

是否可以這樣做?由於這個方法是從DataGridView代碼中調用的(我不能修改,因爲它是框架的一部分),我怎麼稱呼它呢?謝謝 – TomShreds 2011-03-08 19:45:29

+1

@Tom - 如果從代碼中調用,您無法控制,那麼恐怕您運氣不好。建議需要更改調用代碼。這是你真的,真的應該包括在問題中的那種細節。 – Oded 2011-03-08 19:47:19

+0

好點,我改變了我的問題。謝謝 – TomShreds 2011-03-08 19:50:15

0

您想修改Boolean類的方法,以便您可以將字符串傳遞給它?如果你想分析字符串,還有很多其他的方法來做到這一點。例如,你可以處理1.000像這樣:

using System.Float; 

string foo = "1.000"; 
float result = Float.parse(foo); 
value = (result == 1.0f); 

這將可能是最好的,如果你寫你自己的擴展方法。如果您使用「1.000」作爲值來表示真實值,並且這是您需要的唯一值,則應該使用一個簡單的方法,如return (arg == "1.000"),或者首先使用布爾值。如果你有多個字符串可以處理的值,你會有不同的邏輯。如果您發佈了一些代碼和要求,我們可能會幫助您更多。 :D