考慮以下功能:有沒有更好的方法來處理轉換異常?
public enum Operator
{
EQUAL = 1,
GREATER_THAN = 2
}
public class checkString
{
public static bool isValid(string inputString, string checkString, Operator operation)
{
switch (operation)
{
case Operator.EQUAL:
if (inputString == checkString)
return true;
break;
case Operator.GREATER_THAN:
// Numeric check for greater than
try
{
double inputDouble, checkDouble;
inputDouble = Convert.ToDouble(inputString);
checkDouble = Convert.ToDouble(checkString);
if (inputDouble > checkDouble)
return true;
}
catch (Exception)
{ }
// Date check for greater than
try
{
DateTime inputDate, checkDate;
inputDate = DateTime.Parse(inputString);
checkDate = DateTime.Parse(inputString);
if (inputDate. > checkDate)
return true;
}
catch (Exception)
{ }
break;
}
return false;
}
}
參數
- inputString:我們要評估
- checkString什麼:輸入必須評估對
- 運營商的標準(值):枚舉我們要執行的操作
其他的事情知道
- 在一個文件中的每一行對這種方法計算返回如果條件已滿足
- 評估由行的文件檢查線記錄的過程中,一個實例它等於條件。它也可能檢查同一條線是否也比條件更大。一旦檢查完成後,它移動到下一個記錄
- 沒有其他的事件偵聽器迷上了比任何違約到位,我不推額外的數據來調試或跟蹤日誌等
問題
在這個過程的任何時刻,我都不知道人們將要評估的是什麼,但我需要能夠檢查「某事」(不管是什麼)等於,大於或小於其他事物。當然,我檢查其他的東西,但我已經大大簡化了這個功能。
也就是說,使用EQUAL或NOT_EQUAL可以快速運行,可以非常快速和高效地根據所述標準在非常大的文件中處理記錄。一旦我添加GREATER_THAN邏輯,它的速度就會很慢......直到需要花費數分鐘來處理過去花費半分鐘時間的20兆文件。
從我可以告訴:
- 拋出異常所有的地方。不能保證字段將是數字或日期類型。所以,我必須嘗試轉換爲這些數據類型來試圖評估條件
- 當異常被拋出時,控制檯獲取在那裏我有沒有指示它這樣做的輸出,它的那種自動
是的,我在這方面缺乏經驗,並且希望更多地瞭解異常處理以及幕後真正發生的事情,因爲當其他80%的記錄不是數字時,這就是20兆,8萬記錄中的很多例外文件。
有更好的方法來處理演員本身以提高效率嗎?我已經看到double.Parse/TryParse,並且可以直接投射在前面,但我不確定哪個最有利。
哇,這是一個非常優雅的泛型使用...我印象深刻。很高興看到從轉換中提取的比較 – Mohgeroth 2011-05-11 23:31:42
太棒了!它是如此真棒。 – Justin 2011-05-12 03:51:58
執行單個文件所花費的時間,現在可以處理超過120個文件(每個文件5至30個兆字節),而不是每條線上評估的超過200個規則。使這個我最喜歡的答案的獎金片是通用方法。對我來說,它是一個很好的觀點,說明泛型方法屬於哪裏...這不是我最強大的領域,儘管我理解它們是如何工作的,但當你不熟練時很難看到它們適合的地方。感謝這個知識,一個很好的答案:) – Mohgeroth 2011-05-12 15:59:23