2017-01-19 11 views
5

Cześć i dziękuję za poświęcony czas.Nieobsługiwany wyjątek w Przeciążeniu ToString

Niedawno zdecydowałem się spróbować użyć Xamarin.Android, aby opracować pomysł, który miałem.

Jednak natknąłem się na najdziwniejszy problem, jaki kiedykolwiek miałem.

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; 
     } 
    } 
} 

W powyższym klasie, kiedy zrobić operację ToString na obiekcie notatki z mniej niż 20 znaków w nim, mam nieobsługiwany wyjątek. Które myślałem, że było dość dziwne, więc zawinąłem część z podciąganiu w próbie/haczyku.

Jednak nadal otrzymuję nieobsługiwany wyjątek. Jak to może być?

Unhandled Exception - ArgumentOutOfRangeException

EDIT: Okno wyjątek wygląda również werid. Zwykle wyglądają tak. Intentional exception

Funkcja ToString jest wywoływana podczas zapełniania ListView, co jest wykonywane w tym kodzie.

[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

co jest wejście na kiedy masz wyjątek? –

+0

Więc mówisz, że kiedy 'Content' ma mniej niż 20 znaków, to również to będzie wewnątrz' stan if'? jeśli tak, czy możesz umieścić punkt przerwania na warunku 'if' i sprawdzić dokładną wartość' Content.Length' w tym czasie. – Amit

+0

Jeśli Content.Length ma mniej niż 20, otrzymuję wyjątek. To może być cokolwiek. Ostatnia poprawka, którą próbowałem, stworzyłem dwie notatki. Jedna z zawartością: "asdfghjklqwertyuiopz", która nie powodowała żadnego wyjątku. I jeden z Treść: „e”, która nie powoduje wyjątek –

Odpowiedz

0

Oto kod I testowane w Visual Studio i potwierdził, że to działa:

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; 
    } 
} 

Oto co kiedyś go (metoda narzędzie jest jednym z moich własnych metod z mojego kodu testować sandbox):

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()); 
} 

Oto co drukowane:

// [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 

(Zauważ, że nie wyświetliło się "Pusty wynik". Musiałem tylko wpisać coś tam, ponieważ w przeciwnym razie, SO nie pozwoliłby mi uruchomić bloku kodu z linią tylko spacji.)

Ponieważ powyższy kod działa dobrze, mogę powiedzieć, że bez względu na twój problem, to doesn nie mają nic wspólnego z kodem. (Lub, co najmniej, ten kod.)

+0

Dzięki za prowadzenie mnie we właściwym kierunku. Nie wiem dokładnie, co się stało. Ale wydaje się, że był to problem w projekcie. Usunąłem projekt i skopiowałem cały kod, który napisałem. Teraz działa dobrze. –