Hoe kan ik value
casten naar paramType
? value
is een string
, paramType
zal waarschijnlijk gewoon een basistype zijn zoals int
, string
, of misschien float
. Ik vind het prima om een uitzondering te maken als er geen conversie mogelijk is.
Antwoord 1, autoriteit 100%
De typen die u gebruikt, implementeren allemaal IConvertible
. Als zodanig kunt u ChangeType
gebruiken.
value = Convert.ChangeType(method.Invoke(null, new[] { value }), paramType);
Antwoord 2, autoriteit 17%
Je zou dynamisch kunnen gaan; bijvoorbeeld:
using System;
namespace TypeCaster
{
class Program
{
internal static void Main(string[] args)
{
Parent p = new Parent() { name = "I am the parent", type = "TypeCaster.ChildA" };
dynamic a = Convert.ChangeType(new ChildA(p.name), Type.GetType(p.type));
Console.WriteLine(a.Name);
p.type = "TypeCaster.ChildB";
dynamic b = Convert.ChangeType(new ChildB(p.name), Type.GetType(p.type));
Console.WriteLine(b.Name);
}
}
internal class Parent
{
internal string type { get; set; }
internal string name { get; set; }
internal Parent() { }
}
internal class ChildA : Parent
{
internal ChildA(string name)
{
base.name = name + " in A";
}
public string Name
{
get { return base.name; }
}
}
internal class ChildB : Parent
{
internal ChildB(string name)
{
base.name = name + " in B";
}
public string Name
{
get { return base.name; }
}
}
}