2010-06-03 84 views
0

我正在尝试创建一个设置类。 Property Test()是一个字符串列表。Vb.net自定义类属性为小写

当我添加一个字符串,如:t.test.Add(“asasasAAAAA”) 我希望它自动变成小写。

由于某种原因,它不是。有任何想法吗?

p.s. 使用t.test.Add((“asasasAAAAA”)。ToLower)将无法正常工作。

谢谢。

Public Class Form1 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Dim t As New Settings 
     t.test.Add("asasasAAAAA") 
     t.test.Add("aBBBBBAAAAA") 
     t.test.Add("CCCCCsasAAAAA") 
    End Sub 
End Class 

Public Class Settings 
    Private strtest As New List(Of String) 

    Public Property test() As List(Of String) 
     Get 
      Return strtest 
     End Get 
     Set(ByVal value As List(Of String)) 
      For i As Integer = 0 To value.Count - 1 
       value(i) = value(i).ToLower 
      Next 

      strtest = value 
     End Set 
    End Property 
End Class 

ashakjs

回答

0

你正在尝试做的,你在做什么不匹配。要做你想做的事,你需要创建你自己的集合类来扩展泛型集合 - 或者在你的设置类中提供一个自定义方法,手动调整之前提供的字符串将其添加到本地(私有)字符串集合。

对于第二种选择的例子,删除设置类暴露字符串列表的公共财产和使用方法如下所示:


Public Sub Add(ByVal newProp As String) 
    strtest.Add(newProp.toLower()) 
End Sub 
+0

非常感谢。 – tcables 2010-06-04 01:22:59

1

这就是原因:设置你的财产的访问实际上从来没有叫过。 当你使用t.test.Add("asasasAAAAA")时,你实际上调用了一个get访问器,它返回一个列表,之后指定的字符串被添加到这个列表中,所以.ToLower函数永远不会被调用。 简单的方法来解决这个问题:

Dim list as New List(Of String) 
list.Add("asasasAAAAA") 
list.Add("aBBBBBAAAAA") 
list.Add("CCCCCsasAAAAA") 
t.test = list 

或者,您也可以实现自己的字符串列表(最简单的方法 - 自Collection(串)继承),它会自动转换所有添加字符串为小写。

+0

两个答案基本相同......但我接受的答案更适合一点。 谢谢。 – tcables 2010-06-04 01:22:34