2012-08-03 62 views
1

我有一個類:至少一個類別字段不爲空

public class A 
{ 
    public string field1 {get;set;} 
    public string field2 {get;set;} 
} 

我要檢查是否至少有一個屬性不爲null。

如何做到這一點? 謝謝。

+0

嗯'field1!= field2'! ! – V4Vendetta 2012-08-03 07:04:29

+0

@ V4Vendetta這隻會檢查它們是否不匹配。如果它們不是null,則不會。 – 2012-08-03 07:06:36

+0

@SimonWhitehead當它們具有相同的值或'null'時爲false)不知道確切的場景如何評論:) – V4Vendetta 2012-08-03 07:11:32

回答

9

反射可能幫助您:

A myInstance = new A(); 
Type myType = myInstance.GetType(); 
if (myType.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | 
          BindingFlags.Static | BindingFlags.Instance) 
    .Any(property => propoerty.CanRead && property.GetValue(myInstance, null) != null)) 
{ /* something is not null in myInstance */} 

無所謂了多少公關你的班級擁有的操作。

注意:正如評論所指出的那樣,這不會檢查非公開和純屬性會炸燬它。代碼已被調整。

+0

隨時接受,並始終記住錯誤檢查(我把它留給代碼保持簡短) – Alex 2012-08-03 07:13:40

+0

@loviji爲什麼使用反射?你不知道你的班級有什麼屬性嗎?這個班不只有兩個屬性嗎? – 2012-08-03 07:30:11

+1

爲什麼浪費時間編寫不可重用的代碼?這可以在一個方法中使用並用於* anything *。其他真實案例:如果某個屬性被添加/刪除,該怎麼辦?這種方法可以讓你不在乎那裏有什麼。 – Alex 2012-08-03 07:35:08

1

它可以是1行..像這樣:

if (instanceOfA.field1 != null || instanceOfA.field2 != null) 

..in其實,對於字符串,它可能是最好的測試是這樣的:

if (string.IsNullOrEmpty(instanceOfA.field1) || 
    string.IsNullOrEmpty(instanceOfA.field2)) 
+1

如果這個類擁有超過幾個屬性,這種方法是一場噩夢 – Alex 2012-08-03 07:10:25

1
if(obj.field1 != null || obj.field2 != null) 
相關問題