我假设您的问题是:如何有效地检查我的对象是否有效?
如果是这样,那么您的对象只是从某个文本源反序列化并不重要。如果您的问题是在反序列化时检查对象以在发现错误时快速停止反序列化,那是另一个问题,您应该更新您的问题。
当涉及到 C# 和管理工具时,通常不会讨论有效地验证对象。原因是不管你怎么做都很快。更常见的是讨论如何以易于阅读和易于维护的方式进行检查。
由于您的问题是关于效率的,因此这里有一些想法:
- 如果要检查大量对象并且性能至关重要,则可能需要将对象更改为数据数组,以便以一致的方式检查它们。例子:
不要让 MyObject[] MyObjects 其中 MyObject 有很多属性,而是分解每个属性并将它们放入这样的数组中:
int[] MyFirstProperties
float[] MySecondProperties
这样,遍历列表并检查值的循环可以尽可能快,并且 CPU 缓存中不会有很多缓存未命中,因为您在内存中向前循环。请务必使用未实现为链表的常规数组或列表,因为这可能会产生大量缓存未命中。
- 如果您不想将对象分解为属性数组,似乎最高速度并不重要,但几乎是最高速度。然后,最好的办法是将对象保存在串行数组中并执行以下操作:
.
bool wasOk = true;
foreach (MyObject obj in MyObjects)
{
if (obj.MyFirstProperty == someBadValue)
{
wasOk = false;
break;
}
if (obj.MySecondProperty == someOtherBadValue)
{
wasOk = false;
break;
}
}
这将检查所有对象的属性是否正常。我不确定你的情况到底是什么,但我认为你明白了。仅检查对象的属性时,速度已经很不错了。
如果您进行字符串比较,请确保在可能的情况下使用 x = y,而不是使用更复杂的字符串比较,因为 x = y 有一些快速退出,例如如果其中任何一个为空,则返回,如果内存地址是一样的,如果我没记错的话,字符串是相等的,还有一些更聪明的东西。对于任何阅读本文的 Java 人,不要在 Java中这样做!它有时会起作用,但并非总是如此。
如果我没有回答您的问题,您需要改进您的问题。