| File: System\ComponentModel\GuidConverter.cs | Web Access |
| Project: src\runtime\src\libraries\System.ComponentModel.TypeConverter\src\System.ComponentModel.TypeConverter.csproj (System.ComponentModel.TypeConverter) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel.Design.Serialization; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Reflection; namespace System.ComponentModel { /// <summary> /// Provides a type converter to convert globally unique identifier objects to and from various /// other representations. /// </summary> public class GuidConverter : TypeConverter { /// <summary> /// Gets a value indicating whether this converter can convert an object in the given source /// type to a globally unique identifier object using the context. /// </summary> public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) { return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType); } /// <summary> /// Gets a value indicating whether this converter can convert an object to /// the given destination type using the context. /// </summary> public override bool CanConvertTo(ITypeDescriptorContext? context, [NotNullWhen(true)] Type? destinationType) { return destinationType == typeof(InstanceDescriptor) || base.CanConvertTo(context, destinationType); } /// <summary> /// Converts the given object to a globally unique identifier object. /// </summary> public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) { if (value is string text) { return new Guid(text); } return base.ConvertFrom(context, culture, value); } /// <summary> /// Converts the given object to another type. The most common types to convert /// are to and from a string object. The default implementation will make a call /// to ToString on the object if the object is valid and if the destination /// type is string. If this cannot convert to the destination type, this will /// throw a NotSupportedException. /// </summary> public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType) { if (destinationType == typeof(InstanceDescriptor) && value is Guid) { ConstructorInfo? ctor = typeof(Guid).GetConstructor(new Type[] { typeof(string) }); Debug.Assert(ctor != null, "Expected constructor to exist."); return new InstanceDescriptor(ctor, new object?[] { value.ToString() }); } return base.ConvertTo(context, culture, value, destinationType); } } }