【发布时间】:2017-01-19 08:30:36
【问题描述】:
您好,感谢您的宝贵时间。
我最近决定尝试使用 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 中。
但是,我仍然得到一个未处理的异常。这怎么可能?
在填充 ListView 时调用 ToString,这是在这段代码中完成的。
[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;
}
}
【问题讨论】:
-
遇到异常时的输入是什么?
-
所以您是说当
Content少于20 个字符时,它是否也在if条件内?如果是,您能否在if条件上设置断点并检查当时Content.Length的确切值。 -
如果 Content.Length 小于 20,我得到了异常。它可以是任何东西。我尝试的最后一次修复,我创建了两个笔记。一个内容为:“asdfghjklqwertyuiopz”,没有引起任何异常。一个内容为:“e”的内容确实导致了异常
-
您是否在
ToString()中设置了断点并观察到异常发生在您期望的位置?因为似乎没有堆栈跟踪... -
@MortenToudahl 你说你把断点on ToString,你试过把它in ToString吗?请记住,每次在调试器中显示对象时都会调用 ToString。
标签: c# visual-studio-2015 xamarin.android