相关疑难解决方法(0)

C#使用Reflection来复制基类属性

我想使用Reflection将所有属性从MyObject更新到另一个属性.我遇到的问题是特定对象是从基类继承的,并且不更新那些基类属性值.

以下代码复制顶级属性值.

public void Update(MyObject o)
{
    MyObject copyObject = ...

    FieldInfo[] myObjectFields = o.GetType().GetFields(
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

    foreach (FieldInfo fi in myObjectFields)
    {
        fi.SetValue(copyObject, fi.GetValue(o));
    }
}
Run Code Online (Sandbox Code Playgroud)

我想看看是否有更多BindingFlags属性我可以用来帮助但无济于事.

c# reflection copy

26
推荐指数
3
解决办法
4万
查看次数

如何将字典转换为我的类实现相同类型的字典?

如果我有

public class Stats : Dictionary<string, double>
{
}

public class Info : Dictionary<string, Stats>
{
}
Run Code Online (Sandbox Code Playgroud)

var data = new Dictionary<string, Dictionary<string, double>> {
    { "1", new Dictionary<string, double> {  { "a", 11 } } },
    { "2", new Dictionary<string, double> {  { "aa", 111 } } },
};
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做:

var test = (Info)data;
Run Code Online (Sandbox Code Playgroud)

以及我需要使用什么运算符或代码才能实例化我的

[class inheriting from a Dictionary<string, Dictionary<string, double>>]

从一个

Dictionary<string, Dictionary<string, double>>?

c# generics type-conversion

4
推荐指数
1
解决办法
1467
查看次数

是不是真的倾向于不可能?它对我来说很好

我知道已经发布了一些与此相同主题相关的问题,但我看到了不同的答案,所以我对哪个答案是正确的感到困惑.

在下面的链接中,人们提到转发不可能 转换/转换基类型为派生类型

在下面的链接中,人们提到只有当派生类是基类downcast和upcast的实例时,才可能进行 向下转换.

我做了一个小实验并使用直接转换在一个迷你项目(C#)上实现了向下转换,例如:DerivedClass dc =(DerivedClass)baseClass,而不检查DerivedClass是否是BaseClass的实例,令我惊讶的是,它正在工作很好,没有任何错误,所以为什么人们说降级是不可能的?

所以我的问题是,转发真的不可能吗?为什么人们似乎对这个话题有不同的答案?毕竟哪一个是真正的答案?有人可以更详细地解释一下吗?

示例代码:

public class Order {  }

public class PurchaseOrder : Order { // some new properties here for PurchaseOrder}

public static PurchaseOrder GetOrder()
{
    Order order = new Order();
    return (PurchaseOrder)order;
}
Run Code Online (Sandbox Code Playgroud)

c# oop inheritance downcast

1
推荐指数
1
解决办法
1269
查看次数

标签 统计

c# ×3

copy ×1

downcast ×1

generics ×1

inheritance ×1

oop ×1

reflection ×1

type-conversion ×1