[英]Return a value from function of the type of a generic function
I'm having troubles returning a value of type "T". 我在返回类型“ T”的值时遇到麻烦。 It's easier to show than to explain so here is the method: 显示起来比解释起来容易,所以这里是方法:
Protected Function GetElementValue(Of T)(ByVal nodeName As String, Optional missingIfNotExists As Boolean = True,
Optional missingIfEmpty As Boolean = True,
Optional ByRef defaultVal As T = Nothing,
Optional maxLength As Integer = Nothing) As T
'Set up the node to get the value from
Dim node = xmlRoot.SelectSingleNode(nodeName)
Select Case True
Case IsNothing(node) 'If the node is missing from the xml document
'Add the node to the misssing elements array if missingIfNotExists = True
If missingIfNotExists Then missingElements.Add(nodeName)
'Return the default value
Return defaultVal
Case node.InnerText.Trim.Length = 0 'The node exists in the xml document but has no value
'Add it to missing elements if missingIfEmpty = True
If missingIfEmpty Then missingElements.Add(nodeName)
'If there is a default value passed in, return that value
Return defaultVal
Case Else 'The node exists and contains data
End Select
'The element exists and contains data
Dim nodeValue = node.InnerText.Trim
'If a size constraint was passed in, ensure the element data is not too long. Shorten the string if it is
If Not IsNothing(maxLength) AndAlso nodeValue.Length > maxLength Then nodeValue = nodeValue.Substring(0, maxLength)
Return CType(nodeValue, T)
End Function
Any idea's or suggestions? 有什么想法或建议吗?
Thanks. 谢谢。
The last return is where I am having problems. 最后的回报是我遇到问题的地方。 It says "nodeValue cannot be converted to type T" 它说“ nodeValue不能转换为类型T”
I have tried the below scenario and i get the error: "Value of type integer cannot be coverted to type T": 我尝试了以下情况,但出现错误:“不能将整数类型的值掩盖为T类型”:
Select Case defaultVal.GetType()
Case GetType(Integer)
Return CType(nodeValue, Integer)
End Select
If you store the value as an object before, it works: 如果您以前将该值存储为对象,则可以使用:
Sub Main()
Dim myInt = Foo(Of Integer)("123")
End Sub
Function Foo(Of T)(input As String) As T
Dim bar As Object = input
Return CType(bar, T)
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.