2017-01-19 10 views
5

あなたのお時間をいただきありがとうございます。ToStringオーバーロードで処理されない例外

私は最近、私が持っていたアイデアを開発するために、Xamarin.Androidを使用して試してみることにしました。

しかし、私は私が今まで持っていた奇妙な問題に遭遇しました。上記のクラスで

public class Note : INote 
{ 
    public string Content { get; set; } 
    public DateTime DateTime { get; set; } 
    public List<ITag> Tags { get; set; } 

    public override string ToString() 
    { 
     try 
     { 
      const int maxLength = 20; 
      if (Content.Length > maxLength) 
      { 
       return Content.Substring(0, maxLength - 1); 
      } 
      return Content; 

     } 
     catch (Exception) 
     { 
      return Content; 
     } 
    } 
} 

私はそれ未満20文字でノートオブジェクトのToStringメソッドの操作を行うとき、私は未処理の例外を取得します。私はかなり奇妙だと思ったので、部分をtry/catchでラップしました。

しかし、私はまだ未処理の例外を取得します。どうすればいいの?

Unhandled Exception - ArgumentOutOfRangeException

EDIT: 例外ウィンドウもwerid見えます。通常、彼らはこのように見えます。 Intentional exception

ToStringは、このコードで行われているListViewの作成時に呼び出されています。ここで

[Activity(Label = "@string/ApplicationName")] 
public class ShowNotesActivity : Activity 
{ 
    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     SetContentView(Resource.Layout.ShowNotes); 
     var persistence = new Persistence(); 
     var listView = FindViewById<ListView>(Resource.Id.listView1); 

     var adapter = new ArrayAdapter<INote>(this, Android.Resource.Layout.SimpleListItem1, persistence.GetAllNotes()); 

     listView.Adapter = adapter; 

    } 
} 
+0

あなたは例外を得たとき、入力は何ですか? –

+0

これは、 'Content'が20文字未満のとき、' if'条件の中に入っていると言っていますか?もしそうであれば、 'if'条件にブレークポイントを置き、その時点での' Content.Length'の正確な値を調べることができます。 – Amit

+0

Content.Lengthが20より低い場合は、例外が発生します。それは何でもかまいません。私が試した最後の修正、私は2つのメモを作成しました。 "asdfghjklqwertyuiopz"という内容の例外はありませんでした。そして内容の: "e"例外を引き起こした –

答えて

0

は、私は、Visual Studioでテストし、それが動作することを確認したコードである:ここでは

public class Card 
{ 
    public string Content { get; set; } 

    public override string ToString() 
    { 
     if (Content == null) 
      return null; 

     const int maxLength = 20; 
     if (Content.Length > maxLength) 
      return Content.Substring(0, maxLength - 1); 

     return Content; 
    } 
} 

は、ユーティリティメソッドは、私のコードから自分の方法の一つである(私はそれをテストするために使用するものですサンドボックス):ここで

var card = new Card(); 
var str = Utility.GetRandomAlphaNumString(40); 

for (int i = 0; i < 40; i++) 
{ 
    card.Content = str.Substring(0, i); 
    Console.WriteLine(card.ToString()); 
} 

は、それが印刷されたものです:

// [Empty result] 
W 
W1 
W1U 
W1UJ 
W1UJ2 
W1UJ2X 
W1UJ2X4 
W1UJ2X48 
W1UJ2X48B 
W1UJ2X48BU 
W1UJ2X48BU9 
W1UJ2X48BU9A 
W1UJ2X48BU9A4 
W1UJ2X48BU9A46 
W1UJ2X48BU9A46C 
W1UJ2X48BU9A46CY 
W1UJ2X48BU9A46CYV 
W1UJ2X48BU9A46CYVA 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8R 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 
W1UJ2X48BU9A46CYVA8 

(実際には「空の結果」は印刷されませんでした。私はちょうどそこに何かを入力しなければならなかったので、ちょうど空白の行でコードブロックを開始させませんでした。)

上記のコードはうまく動作するので、私はあなたの問題が何であれ、コードと関係がありません。 (あるいは、非常に少なくとも、このコード。)

+0

私を正しい方向に導いてくれてありがとう。私は何が起こったのか正確にはわかりません。しかし、それはプロジェクトの問題だったようです。私はプロジェクトを削除し、私が書いたすべてのコードをコピーしました。今はうまく動作します。 –

関連する問題