gpt4 book ai didi

c# - ToString 重载中未处理的异常

转载 作者:太空狗 更新时间:2023-10-29 23:49:41 26 4
gpt4 key购买 nike

您好,感谢您的宝贵时间。

我最近决定尝试使用 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

编辑:异常窗口看起来也很奇怪。通常他们看起来像这样。 Intentional exception

在填充 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;

}
}

最佳答案

这是我在 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

(请注意,它实际上并没有打印“空结果”。我只需要在那里输入一些东西,否则不会让我以一行空格开始代码块。)

既然上面的代码工作得很好,我可以说无论你的问题是什么,它与代码没有任何关系。 (或者,至少,这个代码。)

关于c# - ToString 重载中未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com