gpt4 book ai didi

c# - 是否可以做出动态的沮丧?

转载 作者:行者123 更新时间:2023-12-02 19:43:41 24 4
gpt4 key购买 nike

如何使用强运行时已知类型进行向下转换?

public class A {}

public class B : A { public int i; }

public class C
{
B b = new B();
A a = b; // here upcast, and "a" still keeps link to "b"
((B)a).i; // no problem it works

Type t = b.GetType(); // BUT how to downcast with strongly runtime known type ?
((t)a).i; // like here
}

最佳答案

任何运行时转换的问题,例如使用Convert.ChangeType,您只会返回object,这意味着您将无法执行任何有用的操作(例如设置属性)而不使用反射。

“我不知道类型,但我相信我可以设置给定属性”的一种可能性是使用dynamic:

B b = new B();
A a = b;
dynamic x = a;
x.i = 100;
Console.WriteLine(b.i); /// writes 100.

实例:https://rextester.com/WJDQQ44845

请注意,如果您尝试调用不存在的属性/方法,则会显示相应的错误:

x.nosuchproperty =  100;

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Rextester.B' does not contain a definition for 'nosuchproperty'

关于c# - 是否可以做出动态的沮丧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59717702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com