2014-06-05 47 views
2

我是C#的新手。我編輯了現有的代碼來做我希望它做的事情。當有數據可以正常工作時。但是,當MAXGUST和PRECIPITATION有空值時,我會收到錯誤。 CITY和STATE將始終具有價值。是否可以在我的StringBuilder中插入if/then語句?將stringbuilder中的空值轉換爲「not available」字符串

if (obj.Properties().Any(x => x.Name == "CITY") && obj.Properties().Any(x => x.Name == "STATE")) 
{ 
    var city1 = obj.Properties().Where(x => x.Name == "CITY").Select(y => y.Value.Value<string>()).FirstOrDefault(); 
    var state1 = obj.Properties().Where(x => x.Name == "STATE").Select(y => y.Value.Value<string>()).FirstOrDefault(); 
    var maxGust = obj.Properties().Where(x => x.Name == "MAXGUST").Select(y => y.Value.Value<int>()).FirstOrDefault(); 
    var precip = obj.Properties().Where(x => x.Name == "PRECIPITATION").Select(y => y.Value.Value<float>()).FirstOrDefault(); 

    this.Description = 
      new StringBuilder().Append(city1).Append(", ").Append(state1) 
      .Append("<br />").Append(maxGust).Append(" MPH Gust") 
      .Append("<br />").Append(precip).Append(" in").ToString(); 

} 
+0

precipitation = precip ?? 「你的字符串」 –

+4

爲什麼不使用'string.Format'?爲什麼要爲此創建一個stringbuilder? –

+0

你會得到什麼錯誤? – Guffa

回答

1

由於maxGust is of type INT andis a float`,他們不能爲空,而是你與它們的默認值(0,0F進行檢查)

像:

.Append(maxGust != default(int) ? maxGust.ToString() : " not available ") 

.Append(precip != default(float) ? precip.ToString() : " not available ") 
     //or precip != 0f 

考慮使用string.Format,你真的不需要使用StringBuilder一次性濃度。

+0

謝謝我會試試這個。其實我有更多的int變量來連接。 – Andrew

+0

@Andrew,仍然不使用'StringBuilder',在多次迭代中創建一個字符串的情況下,StringBuilder確實很有用。 – Habib

+0

我在運行應用程序後,出現「空值無法轉換爲值類型」的錯誤。我註釋掉了所有的stringbuilder代碼,所以它必須在我的var語句中用於maxGust和沉澱。 – Andrew

4

可以使用 ??運營商,如果左操作數爲空,它返回正確的操作。

.Append(maxGust ?? "not available")... 


編輯:回答上述不會工作你的情況,因爲maxGustint型的,也決不能爲null。所以,用你現在的代碼,這個問題並沒有什麼意義。如果maxGust可能沒有值,則它應該是int?(與Nullable<int>相同),並且如果沒有值,則應將指定它的表達式修改爲返回null。

+0

謝謝。我收到一個錯誤。 「運算符不能用於int和string類型的操作數」 – Andrew

+0

'maxGust'的類型爲'int','precip'爲浮點數,它們不能爲空,而必須使用它們的默認值檢查它們*(0,0f)* – Habib

+0

@Andrew,實際上它不適用於值類型......但是,如果maxGust不能爲空,那麼您的要求並沒有意義。考慮使用可空類型 –

0

您不需要將所有這些表達式鏈接在一起。拆分出來,你可以正常使用條件語句:

var sb = new StringBuilder(); 
if (myVariable != null) 
{ 
    sb.Append(myVariable); 
} 

... 

this.Description = sb.ToString();