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 类型转换行为的自定义类型作者通常实现一个支持字符串中自己唯一 ConvertFrom 行为的 TypeConverter 类。 此行为允许从作为 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, Attribute[])

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

GetProperties(ITypeDescriptorContext, Object)

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

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)

适用于

另请参阅