Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否将变量转换为仅在运行时已知的类型?_C# - Fatal编程技术网

C# 是否将变量转换为仅在运行时已知的类型?

C# 是否将变量转换为仅在运行时已知的类型?,c#,C#,如何将值转换为参数类型value是一个string,paramType可能只是一个基本类型,比如int,string,或者可能是float。如果不可能进行转换,我很乐意抛出一个异常。您使用的类型都实现了IConvertible。因此,您可以使用ChangeType foreach (var filter in filters) { var filterType = typeof(Filters); var method = filterType.GetMethod(filter,

如何将
转换为
参数类型
value
是一个
string
paramType
可能只是一个基本类型,比如
int
string
,或者可能是
float
。如果不可能进行转换,我很乐意抛出一个异常。

您使用的类型都实现了
IConvertible
。因此,您可以使用
ChangeType

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 = Convert.ChangeType(method.Invoke(null, new[] { value }), paramType);

@MichaelFreidgeim评论的可能重复与前一个评论的可能重复。@k注意,“可能重复”评论通常是在有人投票以重复形式结束问题时自动生成的。不确定为什么系统第二次插入相同的注释,而不是第一次注释的递增投票。可能是最古老的评论是手动创建的,因为它在'mable'@kmote中的大小写p较低,这是一个已知的问题。。。一行。var值=Convert.ChangeType(objectValue,objectType);
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; }
        }
    }
}