共用方式為


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($"{nameof(MyProperty)} is not valid");
        }
        // 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)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 類別建立你的型別實例。 不要假設呼叫者是可信的,來寫出不安全的程式碼。 假設呼叫者可能會在部分信任中建立你類型類型的實例。

建構函式

名稱 Description
TypeConverter()

初始化 TypeConverter 類別的新執行個體。

方法

名稱 Description
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)

適用於

另請參閱