【问题标题】:for loop in vb.net add a counter to existing stringvb.net中的for循环向现有字符串添加一个计数器
【发布时间】:2010-02-23 00:26:48
【问题描述】:

我有一个这样的 for 循环:

for i = 0 as integer to 100
    result &= "Name" & sqldr("name")
    result &= "Lastname" & sqldr("lastname")
    result &= "dob" & sqldr("dob")
next

sqldr 是 sql 数据读取器(这里不重要)
我希望我的最终结果是:

Name1 = Sam
Lastname1 = Davis
dob1 = 01/01/1966

Name2 = 
...
Name3 = 

依此类推,具体取决于数据库中有多少条记录。 如何在这个 for 循环中实现这一点?

【问题讨论】:

    标签: vb.net loops for-loop


    【解决方案1】:

    嗯,首先你应该使用 StringBuilder,因为它比连接字符串更有效。

    所以下面应该会产生预期的结果(对不起,我或熟悉 C#):

    Dim sb as StringBuilder = new StringBuilder() ' that is where I am not so sure
    
    for i = 0 as integer to 100
        sb.AppendFormat("Name{0} = {1}", i, sqldr("name")
        sb.AppendFormat("Lastname{0} = {1}", i, sqldr("lastname")
        sb.AppendFormat("dob{0} = {1}", i, sqldr("dob")
    next
    
    result = sb.ToString()
    

    【讨论】:

    • 我同意 StringBuilder 对他来说是一种更好的方法,但是他说它需要遍历找到的记录数。所以这意味着他需要从他的 select 语句中返回一个计数。
    【解决方案2】:

    您需要在 For 循环之前进行选择。选择将获得返回的记录总数。将该数字存储在变量中。

    Dim sqlcount as integer = 100 'this should actually be the result of your sql query
    for i = 0 as integer to sqlcount
        result &= "Name" & sqldr("name")
        result &= "Lastname" & sqldr("lastname")
        result &= "dob" & sqldr("dob")
        i = i + 1
    next
    

    【讨论】:

    • 是的,如上所述,您应该使用 String.Format 和 StringBuilder 以获得更好的性能。
    【解决方案3】:

    这样就可以了:

    for i = 0 as integer to 100
        result &= "ApplicantName" & i.ToString() & " = " & sqldr("name")
        result &= "Lastname" & i.ToString() & " = " sqldr("lastname")
        result &= "dob" & i.ToString() & " = " sqldr("dob") & "\n\n"
    next
    

    但是,为了获得更好的性能,您应该使用string.FormatStringBuilder

    Dim sb as StringBuilder = new StringBuilder()
    for i = 0 as Integer to 100
        sb.Append(String.Format("ApplicantName{0} = {1}", i, sqldr("name"))
        sb.Append(String.Format("Lastname{0} = {1}", i, sqldr("lastname"))
        sb.Append(String.Format("dob{0} = {1}\n\n", i, sqldr("dob"))
    next
    Dim result as String = sb.ToString()
    

    StringBuilder 也有一个 AppendFormat 重载,这使得这更容易:

    Dim sb as StringBuilder = new StringBuilder()
    for i = 0 as Integer to 100
        sb.AppendFormat("ApplicantName{0} = {1}", i, sqldr("name")
        sb.AppendFormat("Lastname{0} = {1}", i, sqldr("lastname")
        sb.AppendFormat("dob{0} = {1}\n\n", i, sqldr("dob")
    next
    Dim result as String = sb.ToString()
    

    【讨论】:

    • 字符串连接在处理较大的数字时效率不高,请改用StringBuilder。
    • @Obalix - 我很清楚这一点。你添加评论时我正在编辑;)
    • 对现有问题的轻微修正 - 结果应该有“申请人”前缀申请人1名称=“山姆...申请人2名称=...
    • @wedds - 真的吗?从“Name”到“ApplicantName”的变化你自己搞不定?
    • 做个好人,我不如你们聪明
    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多