Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / _UriTypeConverter.cs / 1 / _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;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataTableTypeConverter.cs
- AmbientLight.cs
- EdmMember.cs
- WorkflowApplicationAbortedEventArgs.cs
- CellParagraph.cs
- ControlUtil.cs
- DataTablePropertyDescriptor.cs
- MSHTMLHost.cs
- DayRenderEvent.cs
- UdpTransportSettingsElement.cs
- InvalidOperationException.cs
- PrePostDescendentsWalker.cs
- DataGridViewRow.cs
- RIPEMD160Managed.cs
- SessionIDManager.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- DataFormats.cs
- DbConnectionOptions.cs
- TextDecoration.cs
- ProxyWebPartConnectionCollection.cs
- DataRecordInternal.cs
- BitmapDownload.cs
- AutoResetEvent.cs
- UniqueEventHelper.cs
- ConfigXmlText.cs
- HtmlTernaryTree.cs
- PrimitiveXmlSerializers.cs
- RightsManagementInformation.cs
- WebPartHelpVerb.cs
- DataGridViewImageCell.cs
- Point3DKeyFrameCollection.cs
- AlgoModule.cs
- SimpleApplicationHost.cs
- SolidBrush.cs
- DecoderReplacementFallback.cs
- NestPullup.cs
- SessionIDManager.cs
- MediaContext.cs
- WindowsScroll.cs
- AuthorizationRule.cs
- documentsequencetextcontainer.cs
- XmlKeywords.cs
- BinaryReader.cs
- DodSequenceMerge.cs
- DiagnosticsConfigurationHandler.cs
- ArithmeticException.cs
- DataTableReaderListener.cs
- TreeViewBindingsEditorForm.cs
- AnimationClockResource.cs
- PriorityItem.cs
- FileAccessException.cs
- XmlCharCheckingReader.cs
- CodeCommentStatementCollection.cs
- ComponentManagerBroker.cs
- HealthMonitoringSection.cs
- SoapSchemaExporter.cs
- WebZone.cs
- LinkedList.cs
- PasswordDeriveBytes.cs
- PointAnimationUsingKeyFrames.cs
- CngProvider.cs
- DESCryptoServiceProvider.cs
- SqlClientWrapperSmiStream.cs
- CellParagraph.cs
- PageCodeDomTreeGenerator.cs
- StyleBamlRecordReader.cs
- GenerateTemporaryAssemblyTask.cs
- MultiDataTrigger.cs
- DataGridItem.cs
- ResolveNameEventArgs.cs
- DataGrid.cs
- PrincipalPermission.cs
- EnumerableValidator.cs
- GeometryHitTestResult.cs
- WindowsComboBox.cs
- CrossSiteScriptingValidation.cs
- EdmToObjectNamespaceMap.cs
- FtpWebRequest.cs
- UdpDiscoveryEndpointElement.cs
- DataRelationPropertyDescriptor.cs
- WsatAdminException.cs
- ClientOperation.cs
- HtmlTableRowCollection.cs
- _AutoWebProxyScriptEngine.cs
- _NtlmClient.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- CLRBindingWorker.cs
- NameScopePropertyAttribute.cs
- ArraySubsetEnumerator.cs
- ParameterCollection.cs
- DocumentViewerConstants.cs
- ReferentialConstraint.cs
- UIElement.cs
- BackStopAuthenticationModule.cs
- TagNameToTypeMapper.cs
- WmiEventSink.cs
- Atom10FeedFormatter.cs
- XamlTypeMapperSchemaContext.cs
- SendMailErrorEventArgs.cs
- ChtmlPageAdapter.cs