擴充方法可以讓你在不建立新的衍生型別、不重新編譯,也不以其他方式修改原始型別的情況下,為現有型別新增方法。擴充方法雖然定義為靜態方法,卻是以執行個體方法的語法來呼叫。它們的第一個參數前面會加上this修飾詞,用來指定方法所操作的型別,並在命名空間層級納入範圍。
public static int WordCount(this string str)
{
return str.Split().Length;
}
"Hello World".WordCount();
// => 2
在這個練習中,你會處理一行行的日誌。
每一行日誌都是格式如下的字串:"[<LEVEL>]: <MESSAGE>"。
日誌層級有三種:
INFOWARNINGERROR你有幾個任務,每個任務都會拿到一行日誌,並要你對它做些處理。
回顧上個月的日誌,你會發現測試訊息總是位於某個特定子字串之後。預期不久的將來會需要擷取測試訊息,你決定建立一個輔助方法來幫你處理這件事。
請實作(static)LogAnalysis.SubstringAfter() 擴充方法,它會接收一個字串分隔符號,並回傳分隔符號之後的子字串。
var log = "[INFO]: File Deleted.";
log.SubstringAfter(": "); // => returns "File Deleted."
進一步檢查後,你會發現日誌層級總是位於方括號([ 和 ])之間。預期不久的將來也會需要擷取日誌層級,你決定再建立一個輔助方法來幫你處理這件事。
請實作(static)LogAnalysis.SubstringBetween() 擴充方法,它會接收兩個字串分隔符號,並回傳位於這兩個分隔符號之間的子字串。
var log = "[INFO]: File Deleted.";
log.SubstringBetween("[", "]"); // => returns "INFO"
請實作(static)LogAnalysis.Message() 擴充方法,回傳一行日誌中所包含的訊息。
var log = "[ERROR]: Missing ; on line 20.";
log.Message(); // => returns "Missing ; on line 20."
請實作(static)LogAnalysis.LogLevel() 擴充方法,回傳一行日誌的日誌層級。
var log = "[ERROR]: Missing ; on line 20.";
log.LogLevel(); // => returns "ERROR"