繁体   English   中英

如何确定作为参数传递的object []包含什么?

[英]How to determine what object[] passed as parameter contains?

我认为可以使用反射(我不太确定的技术)来解决此问题。

我的代码正在接收一些在运行时已序列化为XML的代码对象。 当我收到并反序列化它时,一个领域给我带来了一些麻烦。

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

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

class KeyValueListPair
{
  public string Key;
  public string[] Value;
}

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

public DoSomeWork(KeyValuePairType[] data1, KeyValueListPair[] data2)

我有以下情况要处理:

object []包含:

  1. 在这种情况下我什么都没有打电话给DoSomeWork(null,null)

  2. 仅由KeyValuePairType组成的数组,在这种情况下,我称为DoSomeWork(KeyValuePairType [],null);

  3. 仅由KeyValueListPair组成的数组,在这种情况下,我称为DoSomework(null,KeyValueListPair []);

  4. 或每个数组,在这种情况下,我称为DoSomework(KeyValuePairType [],KeyValueListPair []);

任何想法都欢迎。

谢谢

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

因为它是LINQ语句,所以将涵盖所有可能发生的情况。

我能对那些回答的人表示非常感谢。 对于那些使用LINQ语句回答的人,我已经发布了+1。

假设您可以使用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);
}

您可以在C#3中使用LINQ来做到这一点,如下所示:

void HandleThings(params object[] values) {
    var pairTypes = values.OfType<KeyValuePairType>().ToArray();
    var listPairs = values.OfType<KeyValueListPair>().ToArray();

    DoSomeWork(pairTypes.Any() ? pairTypes : null, listPairs.Any() ? listPairs : null);
}

您可以通过将.Any()替换为.Length > 0来使其速度更快一点,但这样做的代价是简洁。

这个怎么样:

object[] objects = GetObjects();

var pairs = objects.OfType<KeyValuePairType[]>().FirstOrDefault();
var lists = objects.OfType<KeyValueListPair[]>().FirstOrDefault();

DoSomeWork(pairs, lists);

它在某种程度上取决于如何处理您的各个元素,但是通常, isas关键字应该可以很好地用于检查object []数组中的各个对象,并将它们分配给适当的输出。

确保object []不为null并且长度大于1后,可以仅对数组中的对象调用GetType。

objectArray[0].GetType().FullName

将返回

"Namespace.KeyValuePairType"

要么

"Namespace.KeyValueListPair"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM