用T替换动态对象

时间:2019-04-01 21:02:44

标签: c# oop dynamic

我们有一个结构,其中包含一个源提供的动态数据和固定格式的错误,如下所示:

[1, 2, 3]
[1, 2, 3]
[1, 2, 3]

TheData可以是各种各样的东西。一个字符串或各种类型的集合。

数据有时无法结构化(在这种情况下,数据应保持动态,或者在某些情况下可以进行结构化。

如何将TheData变成非动态对象?

我正在寻找与此类似的东西(如果可能的话)

struct AllOurInfo {
    public dynamic TheData {get;set;}
    public string[] Errors {get;set;}
}

1 个答案:

答案 0 :(得分:1)

泛型最好在编译时知道要使用的类型时使用。如果要处理此问题,您可以使用

  1. 只有一个AllOurInfo属性的基础Errors类,您将返回此值。
  2. 拥有一个AllOurInfo<T> : AllOurInfo类。
  3. T中确定EvaluateData的类型之后,使用Reflection创建具有确定的AllOurInfo<T>的{​​{1}}的实例,并将其返回为T
  4. 无论您在何处使用返回的值,都将其从AllOurInfo返回到AllOurInfo

总的来说,您不会赢太多,并且如果您不能使用Reflection,那么您将无法做到这一点。

我在这里看到两个选项:

  1. 如果AllOurInfo<T>的类型过多,请保持原样。
  2. 如果只有少数几个,则可以使用Factory方法:
T

当然,您仍然需要强制转换为预期的类型。