2017-01-13 117 views
0

我有一個豆蔻問題是:C#檢查一個UILabel不空不if語句工作

if (selectedlabel.Text!=null|| selectedlabel.Text!=""|| selectedlabel!=null) 
{ 
    basketID = int.Parse(selectedlabel.Text); //nullpointer Value Can not be null 
} 

爲什麼不這項工作?

我已經設置斷點,我看到了selectedlabel.Text爲空:

enter image description here

+0

你在'if'裏面輸入了嗎? –

回答

1

第一應該檢查空值(因爲您試圖訪問對象的實例字段/屬性):

if(selectedlabel != null) 
// or 
if(!ReferenceEquals(selectedlabel, null)) 

那麼你正在做的只是檢查是否字符串爲空或空(在其C#有BUIL-的方法):string.IsNullOrEmpty(selectedlabel.Text)

現在,你只需要連接這些使用&&操作,檢查,如果兩個是真實的,但如果首先檢查是false則失敗。知道它會回落時,第一個條件不滿足,你可以結合到這一點:

if (!ReferenceEquals(selectedlabel, null) && !string.IsNullOrEmpty(selectedlabel.Text)) 
{ 
    // your code here 
} 

但另一個問題是basketID = int.Parse(selectedlabel.Text);。正如我經常說的留有一定的差錯這意味着不認爲用戶是聰明的(更好的方式!總是假設用戶是愚蠢的,因爲地獄)所以,而不是放一個數字,用戶將輸入像「請輸入數字123在這裏「,它會殺死你的應用程序。

爲了擺脫這只是TryParse代替:

int.TryParse(selectedlabel.Text, out basketID); 

好了,所以結合以上的ALL,結果應該是這樣的:

if (!ReferenceEquals(selectedlabel, null) && !string.IsNullOrEmpty(selectedlabel.Text)) 
{ 
    if(!int.TryParse(selectedlabel.Text, out basketID)) 
    { 
     // user entered text that is unconvertible to int 
    } 
} 
+0

謝謝你的詳細解答! – Andreas

+0

感謝您對int.TryParse(selectedlabel.Text,out basketID)的建議; 用戶無法輸入任何內容。它始終是一個數字。該號碼由UIPicker(Xamarin for IOS)生成。 所以應該沒有問題:-) – Andreas

+1

@Andreas:無論如何,我會使用'int.TryParse',因爲它也適用於傳遞'null'。然後代碼變得非常易讀和簡潔:'if(int.TryParse(selectedlabel?.Text,out basketID)){//這裏basketID被初始化}'。這同時處理標籤爲空和標籤文本爲空的情況。 –

6

您使用||而不是正確的&&

if (selectedlabel != null && selectedlabel.Text != null && selectedlabel.Text != "") 
{ 
    basketID = int.Parse(selectedlabel.Text); 
} 

但是,這是更簡潔,也工作:

if (selectedlabel != null && !String.IsNullOrEmpty(selectedlabel.Text)) 
{ 
    basketID = int.Parse(selectedlabel.Text); 
} 

使用int.TryParse以確保它是一個有效的整數:

int basketID; 
if(selectedlabel != null && int.TryParse(selectedlabel.Text, out basketID)) 
{ 
    // ... 
} 

用C#6你也可以使用null-conditional operator:所有你

int basketID; 
if(int.TryParse(selectedlabel?.Text, out basketID)) 
{ 
    // ... 
} 
+0

你也可以提到關於C#6。 –

+0

@TânNguyễn:完成 –

0

更改爲

if (!string.IsNullOrEmpty(selectedlabel?.Text)) 
{ 
    basketID = int.Parse(selectedlabel.Text); 
} 
0

你的if語句應該是平等的如果你希望它檢查爲null,則爲null,那麼它應該是這樣的

if (selectedlabel.Text==null|| selectedlabel.Text!=""|| selectedlabel!=null) 
{ 
    basketID = int.Parse(selectedlabel.Text); //nullpointer Value Can not be null 
} 

否則它不會顯示你正試圖避免的錯誤。 希望它有幫助