我有以下子
Sub InsertValueToTextbox(of t)(byval valueToInsert as t)
Dim text as String
text = valueToInsert.tostring
'Now I put the text into a textbox...
End Sub
我的问题是,如果我得到的值有小数位,我想对其进行四舍五入。所以我尝试了:
text = Math.Round(CType(valueToInsert, Decimal), 1).ToString
但是编译器给我错误,t 不能转换为十进制。 CDec
和 Convert
在这里也没有帮助。谁能告诉我如何将匿名类型转换为基本数据类型(如十进制)?
最佳答案
您可以为所有数字类型和字符串都实现的通用参数添加一个 IConvertivble
约束:
Public Shared Function GetStringValueOf(Of t As {IComparable, IConvertible})(ByVal valueToInsert As t) As String
Dim decimalValue As Decimal
Try
decimalValue = valueToInsert.ToDecimal(Globalization.NumberFormatInfo.CurrentInfo)
Return Math.Round(decimalValue, 1).ToString()
Catch ex As System.FormatException
' silently ignore this '
End Try
Return valueToInsert.ToString(Globalization.NumberFormatInfo.CurrentInfo)
End Function
然后这有效:
Dim result1 As String = GetStringValueOf("Test") ' Test '
Dim result2 As String = GetStringValueOf("100,678") ' 100,7 -> comma is my decimal separator'
Dim result3 As String = GetStringValueOf(100.678) ' 100,7 '
结果:100,7
顺便说一句,该方法的工作不是将文本插入 TextBox
。
关于.net - 将泛型参数转换为原始数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27267592/