Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / _UriTypeConverter.cs / 1305376 / _UriTypeConverter.cs
/*++
Copyright (c) 2003 Microsoft Corporation
Module Name:
_UriTypeConverter.cs
Abstract:
A default TypeConverter implementation for the System.Uri type
Revision History:
--*/
namespace System {
using System.Globalization;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Reflection;
//
// A limited conversion is implemented such as to and from string
// A conversion to InstanceDescriptor is also provided for design time support.
//
public class UriTypeConverter: TypeConverter
{
private UriKind m_UriKind;
public UriTypeConverter() : this(UriKind.RelativeOrAbsolute) { }
internal UriTypeConverter(UriKind uriKind)
{
m_UriKind = uriKind;
}
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == null)
throw new ArgumentNullException("sourceType");
if (sourceType == typeof(string))
return true;
if (typeof(Uri).IsAssignableFrom(sourceType))
return true;
return base.CanConvertFrom(context, sourceType);
}
//
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(InstanceDescriptor))
return true;
if (destinationType == typeof(string))
return true;
if (destinationType == typeof(Uri))
return true;
return base.CanConvertTo(context, destinationType);
}
//
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
string uriString = value as string;
if (uriString != null)
return new Uri(uriString, m_UriKind);
Uri uri = value as Uri;
if (uri != null)
return new Uri(uri.OriginalString,
m_UriKind == UriKind.RelativeOrAbsolute ? uri.IsAbsoluteUri ? UriKind.Absolute : UriKind.Relative : m_UriKind);
return base.ConvertFrom(context, culture, value);
}
//
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
{
Uri uri = value as Uri;
if (uri != null && destinationType == typeof(InstanceDescriptor))
{
ConstructorInfo ci = typeof(Uri).GetConstructor(BindingFlags.Public | BindingFlags.Instance, null, new Type[]{typeof(string), typeof(UriKind)}, null);
return new InstanceDescriptor(ci, new object[] { uri.OriginalString,
m_UriKind == UriKind.RelativeOrAbsolute ? uri.IsAbsoluteUri ? UriKind.Absolute : UriKind.Relative : m_UriKind });
}
if (uri != null && destinationType == typeof(string))
return uri.OriginalString;
if (uri != null && destinationType == typeof(Uri))
return new Uri(uri.OriginalString,
m_UriKind == UriKind.RelativeOrAbsolute ? uri.IsAbsoluteUri ? UriKind.Absolute : UriKind.Relative : m_UriKind);
return base.ConvertTo(context, culture, value, destinationType);
}
//
public override bool IsValid(ITypeDescriptorContext context, object value)
{
string str = value as string;
Uri temp;
if (str != null)
return Uri.TryCreate(str, m_UriKind, out temp);
return value is Uri;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EmptyEnumerator.cs
- TypeBuilderInstantiation.cs
- SecurityBindingElement.cs
- CorrelationResolver.cs
- EncryptedXml.cs
- _SSPISessionCache.cs
- ImageListImage.cs
- BinaryOperationBinder.cs
- ToolBarTray.cs
- WebCategoryAttribute.cs
- MarkupObject.cs
- TimerElapsedEvenArgs.cs
- XmlProcessingInstruction.cs
- FileInfo.cs
- SecurityElement.cs
- MailAddressCollection.cs
- SchemaInfo.cs
- DockPanel.cs
- ParameterModifier.cs
- EntityViewGenerator.cs
- HostedHttpContext.cs
- Function.cs
- XhtmlTextWriter.cs
- SoapAttributeOverrides.cs
- ComponentTray.cs
- RowBinding.cs
- SelectionItemPattern.cs
- XamlRtfConverter.cs
- BufferedStream.cs
- SpotLight.cs
- InputBuffer.cs
- XmlSerializationGeneratedCode.cs
- IUnknownConstantAttribute.cs
- OptimalBreakSession.cs
- AVElementHelper.cs
- ManagementPath.cs
- QueryInterceptorAttribute.cs
- JsonMessageEncoderFactory.cs
- Token.cs
- PolyLineSegment.cs
- ProcessModelInfo.cs
- DoubleSumAggregationOperator.cs
- StreamGeometryContext.cs
- AdRotatorDesigner.cs
- Activator.cs
- ExpressionBindingCollection.cs
- DiagnosticEventProvider.cs
- CommandBinding.cs
- AffineTransform3D.cs
- XamlRtfConverter.cs
- DefaultEventAttribute.cs
- TextRangeEdit.cs
- SchemaCollectionPreprocessor.cs
- DataTableTypeConverter.cs
- NeutralResourcesLanguageAttribute.cs
- SizeAnimation.cs
- SuspendDesigner.cs
- RequestQueryParser.cs
- DescendantOverDescendantQuery.cs
- Style.cs
- StartUpEventArgs.cs
- _UriTypeConverter.cs
- TextOutput.cs
- ListenerConstants.cs
- RectangleConverter.cs
- InstanceOwnerQueryResult.cs
- odbcmetadatacollectionnames.cs
- SchemaMerger.cs
- LogSwitch.cs
- XmlSchemaDocumentation.cs
- SystemWebSectionGroup.cs
- BufferedReadStream.cs
- IImplicitResourceProvider.cs
- IndentedTextWriter.cs
- PackageDigitalSignatureManager.cs
- _TransmitFileOverlappedAsyncResult.cs
- TimelineGroup.cs
- FileReservationCollection.cs
- ExternalFile.cs
- ConfigXmlCDataSection.cs
- ItemsPanelTemplate.cs
- CultureInfoConverter.cs
- DBSchemaTable.cs
- OleAutBinder.cs
- DesignerSelectionListAdapter.cs
- GenericWebPart.cs
- StorageEntityContainerMapping.cs
- DecimalFormatter.cs
- RegexCompiler.cs
- InstanceCreationEditor.cs
- ContourSegment.cs
- XmlReaderSettings.cs
- RemotingSurrogateSelector.cs
- WebPartConnectionCollection.cs
- XmlTextAttribute.cs
- StrongNameIdentityPermission.cs
- SecurityElement.cs
- GenericTextProperties.cs
- DetectRunnableInstancesTask.cs
- ToolStripDropDownClosingEventArgs.cs