Variabele converteren naar type dat alleen bekend is tijdens runtime?

Hoe kan ik valuecasten naar paramType? valueis een string, paramTypezal 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 ChangeTypegebruiken.

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; }
        }
    }
}

Other episodes