如何确定哪个对象[]作为参数包含?

Chr*_*sBD 2 c# reflection

我认为这个问题可以使用反射进行排序(这是一种我不太确定的技术).

我的代码正在接收一些在运行时序列化为XML的代码对象.当我收到它并将其反序列化时,一个字段让我有些麻烦.

有一个字段可以包含以下数据类的组合(为简洁起见,已简化):

class KeyValuePairType
{
  public string Key;
  public string Value;
}

class KeyValueListPair
{
  public string Key;
  public string[] Value;
}
Run Code Online (Sandbox Code Playgroud)

我将这些作为对象[]接收到我的代码中,并且我需要在运行时确定它包含的内容,以便我可以在需要KeyValuePairType []和KeyValueListPair []作为参数的本地对象上调用接口,例如

public DoSomeWork(KeyValuePairType[] data1, KeyValueListPair[] data2)
Run Code Online (Sandbox Code Playgroud)

我有以下案例来应对:

object []包含:

  1. 在什么情况下我调用DoSomeWork(null,null);

  2. 一个KeyValuePairType数组,在这种情况下我调用DoSomeWork(KeyValuePairType [],null);

  3. 一个KeyValueListPair数组,在这种情况下我调用DoSomework(null,KeyValueListPair []);

  4. 或者每个的数组,在这种情况下我调用DoSomework(KeyValuePairType [],KeyValueListPair []);

欢迎任何想法.

谢谢

事实证明,对象数组包含随机的离散对象序列.最初,我被引导相信它可能是一系列离散和这些对象的数组.

因为它是LINQ语句将涵盖所有可能性.

我能否对那些回答的人表示非常感谢.我已经为那些回答LINQ语句的人发布了+1.

Jon*_*eet 5

假设你有LINQ可供你使用......

public void Foo(object[] values)
{
    var pairs = values.OfType<KeyValuePairType>().ToArray();
    var lists = values.OfType<KeyValueListPair>().ToArray();

    pairs = pairs.Length == 0 ? null : pairs;
    lists = lists.Length == 0 ? null : lists;

    DoSomeWork(pairs, lists);
}
Run Code Online (Sandbox Code Playgroud)