2011-02-14 71 views
1

我有一些代码正在工作,但它似乎只是一个关于如何操作的方式,想知道是否有人有任何想法如何整理一下ASP.Net获取具有值的列,然后将它们相加,然后将它们分开

这里是我的代码

Dim TotalNumber As Double 

    Dim NumberFilled As String 

    NumberFilled = Nothing 

    For x = 0 To drCode2a.Tables(0).Columns.Count - 1 

     If Not drCode2a.Tables(0).Rows(0)(x).ToString() = "0" Then 

      NumberFilled += drCode2a.Tables(0).Rows(0)(x).ToString() & "-" 

      TotalNumber = TotalNumber + drCode2a.Tables(0).Rows(0)(x).ToString() 

     End If 
    Next 

    Dim delimiters As Char() = New Char() {"-"c} 

    Dim TotalNumberFilled As String() = NumberFilled.Split(delimiters, StringSplitOptions.RemoveEmptyEntries) 

    Dim AverageRating As Double = TotalNumber/TotalNumberFilled.Length 

Response.Write(NumberFilled & "<br/>" & TotalNumber & "<br/>" & AverageRating) 

基本上我的例子NumberFilled = "1-2-"TotalNumber = 3AverageRating = 1.5

这表明,两列分别填写,他们等于总为3故平均值= 1.5

正如我所说的它的工作原理像它应该,但我想整理一下,如果可能的

感谢

回答

2
Dim totalNumber as Double = 0 
Dim count as Integer = 0 

For x = 0 To drCode2a.Tables(0).Columns.Count - 1 
    Dim current as Double = 0 
    If Double.TryParse(drCode2a.Tables(0).Rows(0)(x).ToString(), current) AndAlso current <> 0 Then 
    count += 1 
    totalNumber += current 
    End If 
Next 

Dim averageRating as Double = totalNumber/count 
1

这里是一个另类。我不知道它会更好,但它确实使用了比字符串快一些的StringBuilder对象,它将总值保持为双精度值,而不是对字符串执行双精度值的双精度转换。

Dim NumberFilled As New StringBuilder("") 
Dim TotalNumber as Double 
Dim ColumnsFilled as Integer = 0 

For each column as DataColumn in drCode2a.Tables(0).Columns 
    Dim value = drCode2a.Tables(0).Rows(0)(column.ColumnName).ToString() 
    If Not "0".Equals(value, StringComparison.OrdinalIgnoreCase) Then 

     If NumberFilled.Length > 0 Then NumberFilled.Append("-") 
     NumberFilled.Append(value) 
     TotalNumber = Convert.ToDouble(value) 
     ColumnsFilled += 1 

    End If 
Next 
相关问题