1

我有一个对象,特别是以下内容:

table.ExtendedProperties["MS_Description"].Value

如果没有属性,Value则为空。如果有一个属性,但它是空的,Value.toString()则为""

因此,我想创建一个满足两种可能性的 if 语句。这是我到目前为止所做的:

if (table.ExtendedProperties["MS_Description"] == null ||
    table.ExtendedProperties["MS_Description"].Value.ToString().Equals(""))

问题是,如果它为空,它仍在检查右侧的条件。

有任何想法吗?

4

5 回答 5

3

你可以做:

if (table.ExtendedProperties["MS_Description"] == null || string.IsNullOrEmpty(table.ExtendedProperties["MS_Description"].Value))

您的代码错误的原因是因为您不检查是否table.ExtendedProperties["MS_Description"].Value为空。

于 2012-12-13T21:42:19.463 回答
2

因此Value不是字符串,那么您必须处理所有条件:

var description = table.ExtendedProperties["MS_Description"];
if (description == null ||
    description.Value == null || 
    description.Value.ToString().Equals(""))
    // no value

顺便说一句,您的代码不太正确

if (table.ExtendedProperties["MS_Description"] == null ||
    table.ExtendedProperties["MS_Description"].Value.ToString().Equals(""))

不是检查值是否为空,而是检查是否table.ExtendedProperties["MS_Description"]不为空。确实如此。你走得更远,但如果table.ExtendedProperties["MS_Description"].Value是 null (你没有检查,还记得吗?),你会得到 NullReferenceException ToString()

于 2012-12-13T21:42:04.737 回答
1

我不确定您指的是DataTable.ExtendedProperties属性还是其他东西,但如果是,属性返回 a System.Data.PropertyCollection,它继承自System.Collections.HashTable.

大部分方法和属性,包括这里讨论的索引器(“Item”),都是直接继承自HashTable,所以一般来说table.ExtendedProperties[key]可以返回任何对象,包括null。

请注意,您还可以调用DataTable.ExtendedProperties.ContainsKey(object key)以确定 PropertyCollection 是否包含特定键。

您知道调用时要检索的对象类型table.ExtendedProperties["MS_Description"].Value吗?

如果是这样,您可能可以使用其他属性来确定该属性是否已设置等。

根据对象table.ExtendedProperties["MS_Description"]的类型,您甚至可以执行以下操作:

if ((table.ExtendedProperties["MS_Description"] ?? "").ToString().Length == 0) {
      .....
}

这将考虑到所有的可能性:

  • 密钥不存在
  • 键存在,但值为空
  • 键存在且值为空

只要table.ExtendedProperties["MS_Decription"]对象在其 Value 属性为 null 或为空时返回“”。因此,有关返回的对象的更多信息可能会有很长的路要走!

于 2012-12-13T21:59:28.947 回答
0
string.IsNullOrEmpty(table.ExtendedProperties["MS_Description"].Value)
于 2012-12-13T21:42:28.960 回答
0

看起来table.ExtendedProperties["MS_Description"]永远不会为空,您应该为空检查Value属性

string value = table.ExtendedProperties["MS_Description"].Value;
if (value == null || value.ToString().Equals(""))
// OR 
if (String.IsNullOrEmpty(value))

如果table.ExtendedProperties["MS_Description"]可以返回null,那么你需要

if (table.ExtendedProperties["MS_Description"] == null ||
    String.IsNullOrEmpty(table.ExtendedProperties["MS_Description"].Value.ToString() ) 

并且由于table.ExtendedProperties["MS_Description"].Value可能返回null,那么您需要

if (table.ExtendedProperties["MS_Description"] == null ||
    table.ExtendedProperties["MS_Description"].Value == null ||
    String.IsNullOrEmpty(table.ExtendedProperties["MS_Description"].Value.ToString() ) 
于 2012-12-13T21:48:15.033 回答