1. ホーム
  2. シーピー

c#におけるConvert.ChangeTypeの意味

2022-02-28 15:47:54

value = Convert.ChangeType(value, typeof(string))
What is the point of turning it this way? How does it differ from value.ToString()?
When is Convert.ChangeType typically used?

現在の型が string であるべきだとわかっている場合は意味がなく、ChangeType は現在の型が何であるべきかがわからない場合、たとえばジェネリックメソッド

T GetObject<T>(string str)

文字列型から指定されたT型への変換が必要で,その時点では

return (T)Convert.ChangeType(str, typeof(T));

strからTへの明示的な変換は絶対にできないので、ChangeTypeのみ。


マイクロソフトテクニカルリソースライブラリについて説明します。 http://technet.microsoft.com/zh-cn/library/system.convert.changetype
変更タイプ  は   として指定されたオブジェクトを  変換タイプ  の汎用変換メソッドです。  パラメータは、任意のタイプのオブジェクトを指定することができます。 変換タイプ  を表す任意の基本型またはカスタム型にすることができます。  タイプ  オブジェクトを作成します。 変換がうまくいくように  を実装する必要があります。  IConvertible  このメソッドは、単に対応する  IConvertible  メソッドが呼び出されます。 このメソッドでは   から  変換タイプ .

using System;

public class ChangeTypeTest {
    public static void Main() {

        Double d = -2.345;
        int i = (int)Convert.ChangeType(d, typeof(int));

        Console.WriteLine("The double value {0} when converted to an int becomes {1}", d, i);

        string s = "12/12/98";
        DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime));

        Console.WriteLine("The string value {0} when converted to a Date becomes {1}", s, dt);        
    }
}
using System;

public enum Continent
{
   Africa, Antarctica, Asia, Australia, Europe, 
   NorthAmerica, SouthAmerica
};

public class Example
{
   public static void Main()
   {
      // Convert a Continent to a Double.
      Continent cont = Continent.NorthAmerica;
      Console.WriteLine("{0:N2}", 
                        Convert.ChangeType(cont, typeof(Double)));

      // Convert a Double to a Continent.
      Double number = 6.0;
      Try {
         Console.WriteLine("{0}", 
                           Convert.ChangeType(number, typeof(Content))));
      }
      catch (InvalidCastException) {
         Console.WriteLine("Cannot convert a Double to a Continent");
      }

      Console.WriteLine("{0}", (Content) number);   
   }
}
// The example displays the following output:
// 5.00
// Cannot convert a Double to a Continent
// SouthAmerica

using System;

public class Example
{
   public static void Main()
   {
      int? intValue1 = 12893;
      double dValue1 = (double) Convert.ChangeType(intValue1, typeof(Double));
      Console.WriteLine("{0} ({1})--> {2} ({3})", intValue1, intValue1.GetType().Name,
                        dValue1, dValue1.GetType().Name);


      float fValue1 = 16.3478f;
      int? intValue2 = (int) fValue1; 
      Console.WriteLine("{0} ({1})--> {2} ({3})", fValue1, fValue1.GetType().Name,
                        intValue2, intValue2.GetType().Name);
   }
}
// The example displays the following output:
// 12893 (Int32) --> 12893 (Double)
// 16.3478 (Single)--> 16 (Int32)




ChangeType(オブジェクト、タイプ)  メソッドは、空の型を別の型に変換します。 但し、他の型を空の型に変換することはできません。  コンバージョンタイプ  は  Nullable<T> をベース型とする。 この変換を行うには、強制型変換器(C#の場合)または変換関数(Visual Basicの場合)のいずれかを使用することができます。 次の例は、空の型との間の変換を説明しています。
using System;

public class Example
{
   public static void Main()
   {
      int? intValue1 = 12893;
      double dValue1 = (double) Convert.ChangeType(intValue1, typeof(Double));
      Console.WriteLine("{0} ({1})--> {2} ({3})", intValue1, intValue1.GetType().Name,
                        dValue1, dValue1.GetType().Name);


      float fValue1 = 16.3478f;
      int? intValue2 = (int) fValue1; 
      Console.WriteLine("{0} ({1})--> {2} ({3})", fValue1, fValue1.GetType().Name,
                        intValue2, intValue2.GetType().Name);
   }
}
// The example displays the following output:
// 12893 (Int32) --> 12893 (Double)
// 16.3478 (Single)--> 16 (Int32)