You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#/VB.NET:用户输入值与Decimal列表比较并获取索引异常问题

问题分析与解决

你的代码里有几个关键错误导致IndexOf始终返回-1,逐个拆解:

  • 循环变量类型错误:你把i声明成了Decimal类型,但列表的索引是整数(Integer),这会导致后续索引操作和参数传递出现类型不匹配的问题。
  • IndexOf用法完全错误:IndexOf方法的作用是传入列表中的元素值,返回该元素的索引。但你传入的是循环变量i(索引值),而不是values(i)(列表元素),而且就算你传i,它的类型也和列表元素(Decimal)不匹配,自然找不到对应元素,返回-1。更关键的是,你已经在循环里拿到了索引i,根本不需要调用IndexOf。
  • 字符串与Decimal直接比较:user_textbox.Text是字符串类型,直接和Decimal类型的列表元素比较会触发隐式转换,可能导致逻辑错误或者运行时异常,必须先把输入文本转换为Decimal类型。

修正后的代码

' 先把用户输入转换为Decimal类型,处理转换失败的情况
If Decimal.TryParse(user_textbox.Text, Dim userInput As Decimal) Then
    ' 循环变量改为Integer类型,对应列表索引
    For i As Integer = 0 To values.Count - 1
        ' 用转换后的Decimal值和列表元素比较
        If userInput > values(i) Then
            ' 直接使用循环变量i作为索引,不需要IndexOf
            test.Text = i.ToString()
            ' 如果只需要第一个满足条件的索引,这里可以加Exit For跳出循环
            ' Exit For
        End If
    Next i
Else
    ' 处理输入不是有效Decimal的情况
    test.Text = "输入无效"
End If

额外说明

  • 如果你的需求是找到第一个满足用户输入 > 列表元素的索引,记得在赋值后加上Exit For,避免后续循环覆盖结果。
  • 一定要用Decimal.TryParse处理输入转换,防止用户输入非数字内容导致程序崩溃。

内容的提问来源于stack exchange,提问作者SO7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:40:05