Storing Windows Phone User Settings: Listing 2

Eliminating string constants.

public static class Settings
{
    public static bool LocationEnabled
    {
        get { return ReadSetting(() => LocationEnabled); }
        set { WriteSetting(() => LocationEnabled, value); }
    }

    public static int RefreshIntervalInMinutes
    {
        get { return ReadSetting(()=>RefreshIntervalInMinutes); }
        set { WriteSetting(()=>RefreshIntervalInMinutes, value); }
    }

    private static void WriteSetting<T>(Expression<Func<T>> 
    propertySelector, T settingValue)
    {
        var memberExpression = propertySelector.Body as MemberExpression;
        var key = memberExpression.Member.Name;
        IsolatedStorageSettings.ApplicationSettings[key] = settingValue;
    }

    private static T ReadSetting<T>(Expression<Func<T>> propertySelector)
    {
        var memberExpression = propertySelector.Body as MemberExpression;
        var key = memberExpression.Member.Name;
        return IsolatedStorageSettings.ApplicationSettings.SafeValue<T>(key);
    }
}

About the Author

Nick Randolph runs Built to Roam, a consulting company that specializes in training, mentoring and assisting other companies build mobile applications. With a heritage in rich client applications for both the desktop and a variety of mobile platforms, Nick currently presents, writes and educates on the Windows Phone platform.