dynamic
ジェネリックメソッドの呼び出し元が使用するたびに、実際に使用される型は単純なようobject
です。たとえば、次のコードは次のとおりです。
public static void Main()
{
Program.DoSomething<int>();
Program.DoSomething<object>();
Program.DoSomething<dynamic>();
Console.WriteLine("Press any key to continue...");
Console.ReadKey(true);
}
public static T DoSomething<T>() where T : new()
{
Console.WriteLine(
"The type is: {0}; equal to object: {1}.",
typeof(T).FullName,
typeof(T) == typeof(object));
dynamic result = new ExpandoObject();
result.Hello = "Hello";
result.Number = 123;
try
{
return (T)result;
}
catch (Exception)
{
Console.WriteLine("Can't cast dynamic to the generic type.");
return new T();
}
}
生成:
タイプは次のとおりです。System.Int32; オブジェクトに等しい:False。
ダイナミックをジェネリックタイプにキャストできません。
タイプは次のとおりです。System.Object; オブジェクトに等しい:真。
タイプは次のとおりです。System.Object; オブジェクトに等しい:真。
ジェネリックメソッド内で、型パラメーターが動的であるか通常のオブジェクトであるかをどのように判断できますか?