Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# 使用Type to";作为「;获取类对象的关键字_C# - Fatal编程技术网

C# 使用Type to";作为「;获取类对象的关键字

C# 使用Type to";作为「;获取类对象的关键字,c#,C#,如何使用Type to“as”关键字获取类对象 以下是一个例子: class A { public string Test { get; set; } public Type Type { get; set; } } class B { public string F { get; set; } } public class Program { public static void Main(string[] args) { var

如何使用Type to“as”关键字获取类对象

以下是一个例子:

class A
{
    public string Test { get; set; }

    public Type Type { get; set; }
}

class B
{
    public string F { get; set; }
}

public class Program
{
    public static void Main(string[] args)
    {
        var a = new A();

        a.Type = typeof(B);

        var getB = (a.Type)Activator.CreateInstance(a.Type);

        getB.F = "Say something ...";
    }
}

此代码不起作用。我正在尝试从Typeof获取类对象。您不能声明编译时未知类型的对象,正如您在此处尝试的那样:

var getB = (a.Type)Activator.CreateInstance(a.Type);
这应该起作用:

public static void Main(string[] args)
{
    var a = new A();

    A.Type = typeof(B);

    var getB = (B)Activator.CreateInstance(a.Type);

    getB.F = "Say something ...";
}
或作为操作员使用:

var getB = Activator.CreateInstance(a.Type) as B;
如果在编译时不知道实际类型,另一种选择是使用关键字:


您不能声明编译时未知类型的对象,正如您在此处尝试的那样:

var getB = (a.Type)Activator.CreateInstance(a.Type);
这应该起作用:

public static void Main(string[] args)
{
    var a = new A();

    A.Type = typeof(B);

    var getB = (B)Activator.CreateInstance(a.Type);

    getB.F = "Say something ...";
}
或作为操作员使用:

var getB = Activator.CreateInstance(a.Type) as B;
如果在编译时不知道实际类型,另一种选择是使用关键字:

C#是一种静态类型语言-必须在强制转换中指定实际类型-它不能是变量。或者,从另一个角度来看,编译器无法在编译时确定
getB
的类型,因此代码是非法的。C#是一种静态类型的语言-必须在强制转换中指定实际类型-它不能是变量。或者,从另一个角度来看,编译器无法在编译时确定
getB
的类型,因此代码是非法的。