Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / Configuration / AppSettingsReader.cs / 1305376 / AppSettingsReader.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Reflection; using System.Configuration; using System.Collections.Specialized; using System.Globalization; namespace System.Configuration { ////// The AppSettingsReader class provides a wrapper for System.Configuration.ConfigurationManager.AppSettings /// which provides a single method for reading values from the config file of a particular type. /// public class AppSettingsReader { private NameValueCollection map; static Type stringType = typeof(string); static Type[] paramsArray = new Type[] { stringType }; static string NullString = "None"; ////// Constructor /// public AppSettingsReader() { map = System.Configuration.ConfigurationManager.AppSettings; } ////// Gets the value for specified key from ConfigurationManager.AppSettings, and returns /// an object of the specified type containing the value from the config file. If the key /// isn't in the config file, or if it is not a valid value for the given type, it will /// throw an exception with a descriptive message so the user can make the appropriate /// change /// public object GetValue(string key, Type type) { if (key == null) throw new ArgumentNullException("key"); if (type == null) throw new ArgumentNullException("type"); string val = map[key]; if (val == null) throw new InvalidOperationException(SR.GetString(SR.AppSettingsReaderNoKey, key)); if (type == stringType) { // It's a string, so we can ALMOST just return the value. The only // tricky point is that if it's the string "(None)", then we want to // return null. And of course we need a way to represent the string // (None), so we use ((None)), and so on... so it's a little complicated. int NoneNesting = GetNoneNesting(val); if (NoneNesting == 0) { // val is not of the form ((..((None))..)) return val; } else if (NoneNesting == 1) { // val is (None) return null; } else { // val is of the form ((..((None))..)) return val.Substring(1, val.Length - 2); } } else { try { return Convert.ChangeType(val, type, CultureInfo.InvariantCulture); } catch (Exception) { string displayString = (val.Length == 0) ? SR.AppSettingsReaderEmptyString : val; throw new InvalidOperationException(SR.GetString(SR.AppSettingsReaderCantParse, displayString, key, type.ToString())); } } } private int GetNoneNesting(string val) { int count = 0; int len = val.Length; if (len > 1) { while (val[count] == '(' && val[len - count - 1] == ')') { count++; } if (count > 0 && string.Compare(NullString, 0, val, count, len - 2 * count, StringComparison.Ordinal) != 0) { // the stuff between the parens is not "None" count = 0; } } return count; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Reflection; using System.Configuration; using System.Collections.Specialized; using System.Globalization; namespace System.Configuration { ////// The AppSettingsReader class provides a wrapper for System.Configuration.ConfigurationManager.AppSettings /// which provides a single method for reading values from the config file of a particular type. /// public class AppSettingsReader { private NameValueCollection map; static Type stringType = typeof(string); static Type[] paramsArray = new Type[] { stringType }; static string NullString = "None"; ////// Constructor /// public AppSettingsReader() { map = System.Configuration.ConfigurationManager.AppSettings; } ////// Gets the value for specified key from ConfigurationManager.AppSettings, and returns /// an object of the specified type containing the value from the config file. If the key /// isn't in the config file, or if it is not a valid value for the given type, it will /// throw an exception with a descriptive message so the user can make the appropriate /// change /// public object GetValue(string key, Type type) { if (key == null) throw new ArgumentNullException("key"); if (type == null) throw new ArgumentNullException("type"); string val = map[key]; if (val == null) throw new InvalidOperationException(SR.GetString(SR.AppSettingsReaderNoKey, key)); if (type == stringType) { // It's a string, so we can ALMOST just return the value. The only // tricky point is that if it's the string "(None)", then we want to // return null. And of course we need a way to represent the string // (None), so we use ((None)), and so on... so it's a little complicated. int NoneNesting = GetNoneNesting(val); if (NoneNesting == 0) { // val is not of the form ((..((None))..)) return val; } else if (NoneNesting == 1) { // val is (None) return null; } else { // val is of the form ((..((None))..)) return val.Substring(1, val.Length - 2); } } else { try { return Convert.ChangeType(val, type, CultureInfo.InvariantCulture); } catch (Exception) { string displayString = (val.Length == 0) ? SR.AppSettingsReaderEmptyString : val; throw new InvalidOperationException(SR.GetString(SR.AppSettingsReaderCantParse, displayString, key, type.ToString())); } } } private int GetNoneNesting(string val) { int count = 0; int len = val.Length; if (len > 1) { while (val[count] == '(' && val[len - count - 1] == ')') { count++; } if (count > 0 && string.Compare(NullString, 0, val, count, len - 2 * count, StringComparison.Ordinal) != 0) { // the stuff between the parens is not "None" count = 0; } } return count; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GestureRecognitionResult.cs
- ArrayTypeMismatchException.cs
- DataServiceRequestOfT.cs
- UnsafeNativeMethods.cs
- DataBindingExpressionBuilder.cs
- SamlConditions.cs
- WindowsListViewItemStartMenu.cs
- XmlDataSource.cs
- UnsafeNativeMethods.cs
- FormViewDeleteEventArgs.cs
- ListDictionary.cs
- FormatException.cs
- SafeLibraryHandle.cs
- XmlAttributeCollection.cs
- XhtmlBasicListAdapter.cs
- DataBindingCollectionConverter.cs
- VerticalAlignConverter.cs
- PersonalizablePropertyEntry.cs
- DateTimeFormat.cs
- ConfigXmlCDataSection.cs
- SevenBitStream.cs
- ExpressionBuilder.cs
- WindowsScrollBarBits.cs
- HttpClientCertificate.cs
- MaterializeFromAtom.cs
- ToolStripOverflow.cs
- SiteMapNodeItemEventArgs.cs
- Int64AnimationBase.cs
- ChannelManagerService.cs
- ScriptResourceAttribute.cs
- InvalidAsynchronousStateException.cs
- WebControlParameterProxy.cs
- SqlCrossApplyToCrossJoin.cs
- ObjectPropertyMapping.cs
- MouseEventArgs.cs
- IdentityHolder.cs
- CacheMode.cs
- XamlPoint3DCollectionSerializer.cs
- storepermissionattribute.cs
- UniqueIdentifierService.cs
- AutomationPattern.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- querybuilder.cs
- TextPatternIdentifiers.cs
- HandlerBase.cs
- TransformerInfo.cs
- PrimitiveDataContract.cs
- TraceContextEventArgs.cs
- NativeMethods.cs
- FormView.cs
- SignalGate.cs
- VisualStyleElement.cs
- SafeLibraryHandle.cs
- DecimalFormatter.cs
- Token.cs
- BindingList.cs
- SecurityTokenException.cs
- IndexedEnumerable.cs
- ProviderException.cs
- ChameleonKey.cs
- ExpandableObjectConverter.cs
- SignatureConfirmationElement.cs
- SmtpException.cs
- EasingKeyFrames.cs
- MenuScrollingVisibilityConverter.cs
- StopRoutingHandler.cs
- ContentOperations.cs
- GeneralTransformCollection.cs
- DataKeyPropertyAttribute.cs
- SourceFileInfo.cs
- ComEventsHelper.cs
- QueryReaderSettings.cs
- CommandArguments.cs
- TemporaryBitmapFile.cs
- ControlValuePropertyAttribute.cs
- SHA384.cs
- DataGridViewDataConnection.cs
- ToolboxBitmapAttribute.cs
- MostlySingletonList.cs
- QueryStatement.cs
- RMEnrollmentPage1.cs
- DifferencingCollection.cs
- Command.cs
- RelatedView.cs
- CanonicalFontFamilyReference.cs
- SqlInternalConnection.cs
- SByteConverter.cs
- StringBuilder.cs
- PagerSettings.cs
- DataColumnPropertyDescriptor.cs
- SortKey.cs
- ControlBuilderAttribute.cs
- PropertyGrid.cs
- HTMLTextWriter.cs
- CultureTableRecord.cs
- HwndAppCommandInputProvider.cs
- HebrewNumber.cs
- AssemblyHash.cs
- XmlQuerySequence.cs
- Parsers.cs