2011-06-20 6 views
0

nullステートメントを無視する方法と、読み込まれた文字列のみに特殊文字を削除する方法を適用する方法。この方法は、空の文字列上で実行しようとしているため、ユーザを押すと、私は例外を取得解答2のための答えは一つであり、何を送信したときに何が起こっているヌルステートメントを無視し、読み込まれた文字列にのみメソッドを適用します。

Answer1 = RemoveSpecialChars(doc.SelectSingleNode("/Main/Answer[@answerid='1']").Attributes["keypress"].Value);     
Answer2 = RemoveSpecialChars(doc.SelectSingleNode("/Main/Answer[@answerid='2']").Attributes["keypress"].Value); 

public string RemoveSpecialChars(string input) 
     { 

      return Regex.Replace(input, @"[^0-9a-zA-Z\._]", string.Empty); 
     } 

は、あります。答え2が空の場合、answer1を渡す最善の方法は何ですか?

答えて

2

あなたの問題はRemoveSpecialChars方法ではなく、むしろSelectSingleNodeの戻り値(nullでもよい)または(もnullでもよい)Attributes["keypress"]属性ではないようですね。

上記のいずれかがNullReferenceExceptionになります。ここでは、おそらく問題の原因となっている、最初から保護するためのコードを書き換えています:

var node1 = doc.SelectSingleNode("/Main/Answer[@answerid='1']"); 
var node2 = doc.SelectSingleNode("/Main/Answer[@answerid='2']"); 

Answer1 = node1 == null ? null : RemoveSpecialChars(node1.Attributes["keypress"].Value); 
Answer2 = node2 == null ? null : RemoveSpecialChars(node2.Attributes["keypress"].Value); 

更新

ヌルを防ぐためにkeypress属性、あなたは

Answer1 = node1 == null || node1.Attributes["keypress"] == null 
      ? null 
      : RemoveSpecialChars(node1.Attributes["keypress"].Value); 

をするでしょうし、 Answer2と同じです。

+0

answeridは常に存在しますが、それは時々空であるキー押しです。空の文字列(この場合はanswerid2 = 2)でメソッドを実行すると例外が発生しますが、keypress2 = ""では、提案された方法は同じですか? – FluxEngine

+0

@ user630581:私は答えを更新しました。 – Jon

関連する問題