none
关于VB.net新增Char类型的问题 RRS feed

  • 问题

  • 我之前是用VB 6.0的现在在VB2008上经常在字符比较遇到问题,主要是Char类型和称为Char类型数组的String类型同为""时不相等
    Dim MyString As String=""
    Dim MyChar As  Char=""
    Dim I as int32

    ' 判断 MyChar =MysSring  ' MyChar 并不等于MyString
    I=Asc("") '不行,有异常
    I=Asc(myString) '不行,有异常
    I=Asc(myChr) ' 然而 I=0
    I=len(myChr)    'i=2 
    I=len(myString)  'i=0 

    myChr =mid("ABCD",5,1)  'myChr = Nothing  
    String=mid("ABCD",5,1) 'myStr=""


    以为Char 类型比String更在处理单个字符更有效
    'Chr变量 在mid函数或者其它字符串被赋值如 myChar="" 时
    然而:
    myString="ABCD"
    for i=0 to 5
    if myChar=mid(myString,i,1)   then exit for  '找不到'(你会怀疑这样做的用途,但不要怀疑有些情况说不定)
    next

    作为Char数组的String类型和Char类型同为""时为什么就不同呢?
    是不是Char类型不要和String不能一同比较?如果不能那么Char在VB.NET有什么用途?
    希望 Char 类型 ,String类型,字符常量,"ABCD"等等都在编译器内部转化为数字,在要显示的时候用函数显示,这样对字符处更有效.
    如果这样:
    YouChar = Mid(YouText, xYouText_I, 1)'不管YouChar是怎样来反正是一个字符
    I2 = Asc(YouChar)
    For I = 48 To 57 '即字符0到9 '
              If I2 = I Then Exit  for                   
    Next
    用这样代替哇太好了:
    YouChar = Mid(YouText, xYouText_I, 1)'不管YouChar是怎样来反正是一个字符
    For I = "0" To "9"   '即数字48 To 57 
              If I2 = YouChar Then Exit  for                   
    Next

    如果比下面的效率更明显了:
    YouChar = Mid(YouText, xYouText_I, 1)'不管YouChar是怎样来反正是一个字符
    For I = 1 To 10 
              If mid("0123456789",I,1)= YouChar Then Exit  for                   
    Next
    我的邮箱13421512580@139.com别名senten_csg@139.com请高手来函见解

    2009年8月8日 10:00

答案

  • 你好,Char数组与String不是同一数据类型,不能直接比较!。.NET 中,字符串一般都保存在String中。
    jon.valett@gmail.com
    2009年8月8日 14:34
    版主
  • 你好!
         String并不是Char数组,String为引用类型,是.NET Framework提供的类!
    周雪峰
    2009年8月8日 12:23
    版主
  • 您好,Char与String间不可以直接使用等号的,因为这是两个不同的数据类型
    如果需要比较的话,您可以使用Char的ToString方法,例如
    Dim c As Char = "T"c 
    Dim s As String = "T"
    If c.ToString =  s Then
      'xxxxxx
    End If
    Mid方法返回的结果依然是String类型,所以类似于 YouChar = Mid(YouText, xYouText_I, 1) 的写法也是不正确的。
    从string中取得某一位置的Char的方法是,使用字符串的Char(index)属性,例如
    Dim s As String = "ABCDEFG"
    Dim c = s.Chars(4)  '→ c="E"c


    It's never too late to learn
    2009年8月8日 13:54

全部回复

  • 你好!
         String并不是Char数组,String为引用类型,是.NET Framework提供的类!
    周雪峰
    2009年8月8日 12:23
    版主
  • 您好,Char与String间不可以直接使用等号的,因为这是两个不同的数据类型
    如果需要比较的话,您可以使用Char的ToString方法,例如
    Dim c As Char = "T"c 
    Dim s As String = "T"
    If c.ToString =  s Then
      'xxxxxx
    End If
    Mid方法返回的结果依然是String类型,所以类似于 YouChar = Mid(YouText, xYouText_I, 1) 的写法也是不正确的。
    从string中取得某一位置的Char的方法是,使用字符串的Char(index)属性,例如
    Dim s As String = "ABCDEFG"
    Dim c = s.Chars(4)  '→ c="E"c


    It's never too late to learn
    2009年8月8日 13:54
  • 你好,Char数组与String不是同一数据类型,不能直接比较!。.NET 中,字符串一般都保存在String中。
    jon.valett@gmail.com
    2009年8月8日 14:34
    版主