.net - 将泛型参数转换为原始数据类型

标签 .net vb.net generics type-conversion anonymous-types

我有以下子

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 不能转换为十进制。 CDecConvert 在这里也没有帮助。谁能告诉我如何将匿名类型转换为基本数据类型(如十进制)?

最佳答案

您可以为所有数字类型和字符串都实现的通用参数添加一个 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 '

结果:1​​00,7

顺便说一句,该方法的工作不是将文本插入 TextBox

关于.net - 将泛型参数转换为原始数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27267592/

相关文章:

java - 如何使用混合数据类型在泛型中初始化数组

.net - 传递变量作为参数与传递另一个函数的返回值时出现 "Invalid procedure call"错误

.net - LINQ 示例 : select typed objects from a list

vb.net - 我可以在 .NET 中通过 SqlConnection 设置 DEADLOCK_PRIORITY 吗?

c# - 如何获取旧式集合中项目的类型?

c# - ObservableCollection<T> 的类型以保存通用接口(interface)

c# - 完成选择项目时的事件?

c# - Master-Detail 使用 Razor、ASP.NET MVC 3 和 .NET 4.0 创建 View

java - 连续屏幕录制以进行错误报告

.net - 如何在 Excel 中将区域设置应用于十进制格式?