如何在VB.NET/C#中比较用户输入值与Decimal列表值并获取索引?
问题分析与修复方案
原代码的核心问题
- 循环变量类型错误:列表索引是整数类型,不能用
Decimal声明i,必须改为Integer。 - 类型不匹配:文本框输入的是字符串,无法直接和
Decimal类型的列表元素比较,必须先将输入转换为Decimal类型。 - 索引获取错误:
values.IndexOf(i)是错误用法,IndexOf用于查找元素在列表中的位置,而i本身就是当前循环的索引,直接使用i即可。 - 逻辑覆盖问题:循环中每次满足条件都会覆盖
test.Text的值,最终只会保留最后一个符合条件的索引,若需要收集所有符合条件的索引,需调整逻辑。
修复后的VB.NET代码
场景1:获取第一个满足条件的索引(输入值大于列表项)
' 先将输入文本转换为Decimal类型,处理转换失败的情况 Dim inputValue As Decimal If Decimal.TryParse(user_textbox.Text, inputValue) Then ' 循环遍历列表,索引用Integer类型 For i As Integer = 0 To values.Count - 1 If inputValue > values(i) Then test.Text = i.ToString() ' 找到第一个符合条件的索引后退出循环 Exit For End If Next i Else ' 输入不是有效的Decimal,提示错误 test.Text = "输入格式错误" End If
场景2:获取所有满足条件的索引(用逗号分隔显示)
Dim inputValue As Decimal If Decimal.TryParse(user_textbox.Text, inputValue) Then Dim matchingIndices As New List(Of Integer)() For i As Integer = 0 To values.Count - 1 If inputValue > values(i) Then matchingIndices.Add(i) End If Next i ' 将所有索引转为字符串,用逗号分隔 test.Text = String.Join(", ", matchingIndices) Else test.Text = "输入格式错误" End If
补充说明
- 必须使用
Decimal.TryParse处理输入转换,避免因输入非数字文本导致程序崩溃。 - 如果需要判断小于的情况,只需将条件中的
>改为<即可。 - 若列表是有序的,还可以用二分查找提高效率,比如
List(Of Decimal).BinarySearch方法,但前提是列表已排序。
内容的提问来源于stack exchange,提问作者SO7
相关产品推荐
相关产品推荐

