如何解决如何在xamarin.forms.maskedentry控件中处理超出范围的索引
好,所以我可以使用此控件:https://github.com/TBertuzzi/Xamarin.Forms.MaskedEntry
<control:MaskedEntry Placeholder="HH:MM:SS" Mask="XX:XX:XX" Keyboard="Numeric" Text="{Binding TaskDuration}" TextChanged="DurationIs8"></control:MaskedEntry>
在我的应用中,用户输入的时长采用以下格式:小时:分钟:秒
然后在保存项目时执行此方法,以获取持续时间以供以后用于计算:
public static TimeSpan GetDuration(string duration)
{
if(duration != null)
{
var value = duration.Split(':').Select(int.Parse).ToArray();
var datetime = new TimeSpan(value[0],value[1],value[2]);
return datetime;
}
return TimeSpan.Zero;
}
我的问题是我希望能够处理用户仅输入的情况,例如:02:0 每次我单击“保存”按钮时,如果MaskedEntry不遵守格式,我都会得到生成错误的持续时间。
当前,每次调用GetDuration方法时,都会生成索引超出范围异常,因为此行:var datetime = new TimeSpan(value[0],value[2]);
试图访问不存在的数组值。
无论如何,如果用户未完成maskedentry,我的应用不会崩溃?非常感谢。
解决方法
首先,不要假设Split
返回的数组中总是有3个值。并添加一个try / catch块来处理所有异常。
public static TimeSpan GetDuration(string duration)
{
try {
if(!String.IsNullOrEmpty(duration)
{
var values = duration.Split(':');
int h,m,s;
if (values.Length > 0) {
h = int.Parse(values[0]);
}
if (values.Length > 1) {
m = int.Parse(values[1]);
}
if (values.Length > 2) {
s = int.Parse(values[2]);
}
var datetime = new TimeSpan(h,s);
return datetime;
}
} catch (Exception ex) {
// log exception or display error message
}
return TimeSpan.Zero;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。