TypeConverter 类

定义

提供一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。

public ref class TypeConverter
public class TypeConverter
[System.Runtime.InteropServices.ComVisible(true)]
public class TypeConverter
type TypeConverter = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type TypeConverter = class
Public Class TypeConverter
继承
TypeConverter
派生
属性

示例

下面的代码示例演示如何创建类型转换器的实例并将其绑定到类。 实现转换器 MyClassConverter的类必须继承自 TypeConverter 类。

public:
   [TypeConverter(Sample::MyClassConverter::typeid)]
   ref class MyClass
   {
      // Insert code here.
   };
[TypeConverter(typeof(MyClassConverter))]
 public class MyClass {
    // Insert code here.
}
<TypeConverter(GetType(MyClassConverter))> _
Public Class Class1
    ' Insert code here.
End Class

如果属性具有枚举,检查设置该属性之前查看枚举值是否有效。 下一个代码示例要求已声明名为 的 MyPropertyEnum 枚举。

public:
   property MyPropertyEnum MyProperty 
   {
      void set( MyPropertyEnum value )
      {
         // Checks to see if the value passed is valid.
         if ( !TypeDescriptor::GetConverter( MyPropertyEnum::typeid )->IsValid( value ) )
         {
            throw gcnew ArgumentException;
         }
         // The value is valid. Insert code to set the property.
      }
   }
public MyPropertyEnum MyProperty {
    set {
       // Checks to see if the value passed is valid.
       if (!TypeDescriptor.GetConverter(typeof(MyPropertyEnum)).IsValid(value)) {
          throw new ArgumentException();
       }
       // The value is valid. Insert code to set the property.
    }
 }

Public WriteOnly Property MyProperty() As MyPropertyEnum
    Set
        ' Checks to see if the value passed is valid.
        If Not TypeDescriptor.GetConverter(GetType(MyPropertyEnum)).IsValid(value) Then
            Throw New ArgumentException()
        End If
        ' The value is valid. Insert code to set the property.
    End Set 
End Property

另一种常见的类型转换器用法是将对象转换为字符串。 下面的代码示例输出变量 c中存储的 Color 的名称。

Color c = Color::Red;
Console::WriteLine( TypeDescriptor::GetConverter( c )->ConvertToString( c ) );
Color c = Color.Red;
    Console.WriteLine(TypeDescriptor.GetConverter(typeof(Color)).ConvertToString(c));
Dim c As Color = Color.Red
Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c))

还可以使用类型转换器从其名称转换值,如下面的代码示例所示。

Color c =  (Color)(TypeDescriptor::GetConverter( Color::typeid )->ConvertFromString( "Red" ));
Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
Dim c As Color = CType(TypeDescriptor.GetConverter(GetType(Color)).ConvertFromString("Red"), Color)

在下面的代码示例中,可以使用类型转换器打印出对象支持的标准值集。

for each ( Color c in TypeDescriptor::GetConverter( Color::typeid )->GetStandardValues() )
{
   Console::WriteLine( TypeDescriptor::GetConverter( c )->ConvertToString( c ) );
}
foreach(Color c in TypeDescriptor.GetConverter(typeof(Color)).GetStandardValues()) {
    Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c));
 }
Dim c As Color
For Each c In  TypeDescriptor.GetConverter(GetType(Color)).GetStandardValues()
    Console.WriteLine(TypeDescriptor.GetConverter(c).ConvertToString(c))
Next c

注解

最常见的转换器类型是来回转换文本表示形式的转换器。 类的类型转换器绑定到具有 TypeConverterAttribute 的类。 除非重写此属性,否则从此类继承的所有类都使用与基类相同的类型转换器。

注意

对于常规类型系统用途,请勿直接访问类型转换器。 相反,请使用 TypeDescriptor访问相应的转换器。 有关详细信息,请参阅提供的代码示例。

但是,在使用 XAML 时,XAML 处理器会直接搜索 TypeConverterAttribute ,而不是通过 TypeDescriptor。 如果确实需要代码中的 TypeDescriptor 实例,或者在 WPF 资源中创建共享实例,则可以直接构造它,而无需引用 TypeDescriptor 或其他反射和类型系统支持。

从 派生的 TypeConverter 类通常作为 XAML 处理器如何从标记转换属性或初始化文本值的一部分引用 (标记本身是字符串) 并为运行时表示形式生成对象。 打算支持 XAML 的类型转换行为的自定义类型作者通常实现一个 TypeConverter 类,该类支持字符串中自己的唯 ConvertFrom 一行为。 此行为允许从作为 XAML 属性值提供的字符串进行类型转换,并为 XAML 处理器提供从字符串创建对象所需的支持,以便可以在分析的对象图中生成对象。 自定义类型或自定义类型的成员通过应用于 TypeConverterAttribute 定义来指示,属性引用自定义 TypeConverter 实现。 有关详细信息,请参阅 XAML 的类型转换器概述

继承者说明

继承自 TypeConverter 以实现自己的转换要求。 从此类继承时,可以重写以下方法:

注意:派生类型可能标记为 internalprivate,但可以使用 类创建 TypeDescriptor 类型的实例。 不要通过假定调用方受信任来编写不安全的代码。 相反,假设调用方可能会在部分信任中创建类型的实例。

有关用于常规 (非 XAML) 用途的类型转换器的详细信息,请参阅 如何:实现类型转换器通用类型转换

构造函数

TypeConverter()

初始化 TypeConverter 类的新实例。

方法

CanConvertFrom(ITypeDescriptorContext, Type)

返回该转换器是否可以使用指定上下文将给定类型的对象转换为此转换器的类型。

CanConvertFrom(Type)

返回该转换器是否可以将给定类型的对象转换为此转换器的类型。

CanConvertTo(ITypeDescriptorContext, Type)

返回此转换器能否使用指定上下文将对象转换为指定类型。

CanConvertTo(Type)

返回此转换器是否可将该对象转换为指定的类型。

ConvertFrom(ITypeDescriptorContext, CultureInfo, Object)

使用指定的上下文和区域性信息将给定对象转换为此转换器的类型。

ConvertFrom(Object)

将给定值转换为此转换器的类型。

ConvertFromInvariantString(ITypeDescriptorContext, String)

使用不变区域性和指定上下文将给定字符串转换为此转换器的类型。

ConvertFromInvariantString(String)

使用不变区域性将给定字符串转换为此转换器的类型。

ConvertFromString(ITypeDescriptorContext, CultureInfo, String)

使用指定的上下文和区域性信息将给定的文本转换为对象。

ConvertFromString(ITypeDescriptorContext, String)

使用指定的上下文将给定的文本转换为对象。

ConvertFromString(String)

将指定文本转换为对象。

ConvertTo(ITypeDescriptorContext, CultureInfo, Object, Type)

使用指定的上下文和区域性信息将给定值对象转换为指定的类型。

ConvertTo(Object, Type)

使用参数将给定的值对象转换为指定的类型。

ConvertToInvariantString(ITypeDescriptorContext, Object)

使用指定的上下文将指定的值转换为区域性不变的字符串表示形式。

ConvertToInvariantString(Object)

将指定值转换为区域性不变的字符串表示形式。

ConvertToString(ITypeDescriptorContext, CultureInfo, Object)

使用指定的上下文和区域性信息将给定的值转换为字符串表示形式。

ConvertToString(ITypeDescriptorContext, Object)

使用给定的上下文将给定的值转换为字符串表示形式。

ConvertToString(Object)

将指定值转换为字符串表示形式。

CreateInstance(IDictionary)

在给定 Object 的一组属性值的情况下重新创建该对象。

CreateInstance(ITypeDescriptorContext, IDictionary)

给定该对象的一组属性值,使用指定上下文创建与此 TypeConverter 相关联的类型的实例。

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetConvertFromException(Object)

返回当转换无法执行时所引发的异常。

GetConvertToException(Object, Type)

返回当转换无法执行时所引发的异常。

GetCreateInstanceSupported()

返回更改此对象的值是否求调用 CreateInstance(IDictionary) 方法来创建新值。

GetCreateInstanceSupported(ITypeDescriptorContext)

返回一个结果,即更改此对象上的某个值是否需要调用 CreateInstance(IDictionary) 以使用指定的上下文创建新值。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetProperties(ITypeDescriptorContext, Object)

使用指定的上下文返回值参数指定的数组类型的属性的集合。

GetProperties(ITypeDescriptorContext, Object, Attribute[])

使用指定的上下文和特性返回由该值参数指定的数组类型的属性集合。

GetProperties(Object)

返回由值参数指定的数组类型的属性集合。

GetPropertiesSupported()

返回此对象是否支持属性。

GetPropertiesSupported(ITypeDescriptorContext)

通过使用指定的上下文,返回此对象是否支持属性。

GetStandardValues()

从默认的上下文返回此类型转换器设计用于的数据类型的标准值集合。

GetStandardValues(ITypeDescriptorContext)

当与格式上下文一起提供时,返回此类型转换器设计用于的数据类型的标准值集合。

GetStandardValuesExclusive()

返回从 GetStandardValues() 返回的标准值的集合是否为独占列表。

GetStandardValuesExclusive(ITypeDescriptorContext)

使用指定的上下文返回从 GetStandardValues() 返回的标准值的集合是否为可能值的独占列表。

GetStandardValuesSupported()

返回此对象是否支持可以从列表中选取的标准值集。

GetStandardValuesSupported(ITypeDescriptorContext)

使用指定的上下文返回此对象是否支持可以从列表中选取的标准值集。

GetType()

获取当前实例的 Type

(继承自 Object)
IsValid(ITypeDescriptorContext, Object)

返回给定的值对象是否对此类型和对指定的上下文有效。

IsValid(Object)

返回给定值对象对于此类型是否有效。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
SortProperties(PropertyDescriptorCollection, String[])

对属性的集合进行排序。

ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于

另请参阅