2011-11-13 70 views
0

我有以下方法,但是如果字符串爲空,它會失敗。如果字符串爲空,我怎麼才能使它返回null?安全地截斷C#中可能爲空的字符串

public static string Truncate(this string value, int maxChars) 
{ 
    return value.Length <= maxChars ? 
      value : 
      value.Substring(0, maxChars) + " .."; 
} 

難道有人也可以向我解釋「這個」的含義。對不起,我不擅長C#,這不是我的代碼。

+4

你問的是如何添加一個'if'語句和第二個'return'?真? – delnan

+0

將最後一個句子直接轉換爲代碼。 –

+0

你的問題在哪裏?你有什麼嘗試? – CodesInChaos

回答

10

通過檢查無效,並適當地返回:)

public static string Truncate(this string value, int maxChars) 
{ 
    if (value == null) 
    { 
     return null; 
    } 
    return value.Length <= maxChars ? 
      value : value.Substring(0, maxChars) + " .."; 
} 

或者你甚至可以使用另一個條件:

public static string Truncate(this string value, int maxChars) 
{ 
    return value == null ? null 
     : value.Length <= maxChars ? value 
     : value.Substring(0, maxChars) + " .."; 
} 
+0

在這裏沒有使用'string.IsNullOrEmpty'的任何理由?我傾向於不要質疑Skeetmeister,但它看起來好像更好。 – Polynomial

+0

@Polynomial違反規範。如果參數是'null',OP想要返回'null',但如果參數爲空,他很可能要''''。根據我的經驗,將''''''和'null'視爲等價的設計是非常不錯的設計。 – CodesInChaos

+0

@CodeInChaos - 是的,我錯過了這一點。在這種情況下,代碼是完美的。向前走! :) – Polynomial

-9

放一個try catch塊。如果它觸發,則返回null。

+11

不,這是*不是*在C#中處理完全可避免異常的慣用方法。它更簡單,更高效,並且可讀性更高,可以顯式檢查null。 –

+2

例外情況只能在特殊情況下發生。如果您可以檢查可能導致異常的輸入,則必須這樣做。 – Polynomial

+1

-1對於明顯不好的建議。 –

1

除了喬恩斯基特的好前面回答你想知道的this是什麼對於。這使得該方法成爲擴展方法。你擴展字符串類與您的特定功能的功能。 this string value是Visual Studio的神奇功能,用於在每個字符串變量的上下文菜單中向您顯示此函數,併爲編譯器提供該變量,該方法將作爲第一個參數調用。該功能必須是靜態的。