Преобразовать переменную в тип известен только во время выполнения?
foreach (var filter in filters)
{
var filterType = typeof(Filters);
var method = filterType.GetMethod(filter, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static);
if (method != null)
{
var parameters = method.GetParameters();
Type paramType = parameters[0].ParameterType;
value = (string)method.Invoke(null, new[] { value });
}
}
как я могу бросить value
to paramType
? value
это string
,paramType
вероятно, будет просто базовый тип, как int
,string
, а может float
. Я в порядке с этим, бросая исключение, если преобразование невозможно.
2 ответа:
типы, которые вы используете все реализовать
IConvertible
. Как таковой вы можете использоватьChangeType
.value = Convert.ChangeType(method.Invoke(null, new[] { value }), paramType);
вы можете пойти динамический; например:
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; } } } }