Chapter 1 - Item 5 : Prefer FormattableString for Culture-Specific Strings

Effective C# (Covers C# 6.0), (includes Content Update Program): 50 Specific Ways to Improve Your C#, 3rd Edition By Bill Wagner 讀後心得

Item 4 提到使用 Iterpolated Strings 讓組合字串更容易且彈性。此章節進一步延伸;當有多國語系的輸出需求時,建議使用 FormattableString 以達到需求。

範例程式碼:

public void testForamattableString( )
{
    var value = 12.98d;

    FormattableString original = $"The value is {value} and it's {DateTime.Now}.";

    var germanFormat = original.convertToGerman( );
    var usFormat = original.convertToUS( );

    Debug.WriteLine( $"German format : {germanFormat}" );
    Debug.WriteLine( $"US format : {usFormat}" );
}

public static class Extensions
{
    public static string convertToGerman( this FormattableString str )
    {        
        return string.Format( 
            System.Globalization.CultureInfo.CreateSpecificCulture( "de-DE" ), 
            str.Format, 
            str.GetArguments( ) );
    }

    public static string convertToUS( this FormattableString str )
    {      
        return string.Format( 
            System.Globalization.CultureInfo.CreateSpecificCulture( "en-US" ), 
            str.Format, 
            str.GetArguments( ) );
    }
}

Output:
German format : The value is 12,98 and it's 09.02.2017 14:36:42.
US format : The value is 12.98 and it's 2/9/2017 2:36:42 PM.

結論:
1. 當有多國語系輸出需求時,需明確宣告 interpolated Strings 型別為 FormattableString。

2. 利用 string.Format 方法帶入 FormattableString 參數,並回傳對應目標語系的字串。