Effective C# (Covers C# 6.0), (includes Content Update Program): 50 Specific Ways to Improve Your C#, 3rd Edition By Bill Wagner 讀後心得
在 C# 6.0 以前,當我們需要組合字串時需要呼叫 string.Format;而在 C# 6.0 發表了一種新的組合字串方式 interpolated Strings,以下針對此兩種方式做比較與新方法改善之處。
1. string.Format 不易在編譯階段找到錯誤;而 interpolated Strings 提供了更清楚的表達式,讓開發者在編譯階段就能發現錯誤。
以下寫法會在運行後擲出 System.FormatException。
string _dog = "Dog";
string _animal = "Animal";
// throw System.FormatException
string s1 = string.Format( "{0} is an {1}", new object[ 1 ] { _dog } );
// throw System.FormatException
string s2 = string.Format( "{0} is an {1}", _animal );
而 interpolated Strings 在編譯階段組合字串時就可檢查運行時的正確性。
string _dog = "Dog";
string _animal = "Animal";
string s3 = $"{_dog} is an {_animal}";
組合字串的順序正確性也在編譯時就能檢查。
2. interpolated Strings 可簡化 ToString 多載,程式碼更加簡潔。
Console.WriteLine( $"The value of pi is {Math.PI.ToString( )}" );
若需要輸出至小數第二位。
Console.WriteLine( $"The value of pi is {Math.PI.ToString( "F2" )}" );
進一步簡化。
Console.WriteLine( $"The value of pi is {Math.PI:F2}" );
3. interpolated Strings 可內嵌條件判斷式,增加設計彈性。
Console.WriteLine( $"The cumstomer's name is {c.Name ?? "Name is missing"}" );
Console.WriteLine( $@"The value of pi is {( round ? Math.PI.ToString( ) : Math.PI.ToString( "F2" ) )}" );
Note:若包含判斷式 : 則無法用 2. 方式進一步簡化 ToString 多載。
// Compile Error
Console.WriteLine( $"The value of pi is {( round ? Math.PI : Math.PI:F2 )}" );
結論:
1. interpolated Strings 並"不能"組合成參數化的 SQL 命令式,而是單一字串。需注意。
2. 實務上可盡量運用 interpolated Strings 增加程式可讀性與正確性。
1. interpolated Strings 並"不能"組合成參數化的 SQL 命令式,而是單一字串。需注意。
2. 實務上可盡量運用 interpolated Strings 增加程式可讀性與正確性。