如果我通过函数传递Label1.Text,它会将其视为对象而不是字符串。哪个好。
但是当我做的事情如下:
Dim temp As Object = Label1.Text
然后将它传递给一个函数,它将它视为一个字符串,这是预期的。我怎么能这样做,所以我可以将Label1.Text设置为一个对象,就像我通过函数传递它一样。
编辑:这是我想要做的事情
Public Sub test()
setIt(Label1.Text, "Test") 'this works
Dim temp As Object = Label1.Text
setIt(temp, "Test") 'this doesnt work
End Sub
Public Sub setIt(ByRef e, ByVal v)
e = v
End Sub
答案 0 :(得分:4)
字符串是一个字符串,无论您是否将其向下转换为对象。您可以使用typeof temp is String
(typeof-keyword)进行检查。
我不明白你的实际问题在哪里。
您无法使用给定对象设置Label的Text属性,因为Label.Text必须是Type String。但是您可以使用Object的ToString来获取对象的String represantation,或者如果您知道(使用typeof检查)您的Object是String类型,则可以简单地将其转换回来:
Label1.Text = DirectCast(temp , String)
修改强> 根据您的更新,我强烈recommend设置Option Strict! 为什么不简单地将值赋给Text属性?
Label1.Text = "Test"
你是ByRef方法非常容易出错并且不易阅读。 如果你真的需要这样的东西,并且你只想设置不同控件的Text属性,那么试试这个:
Public Sub setControlText(ByVal ctrl As Control, ByVal text String)
ctrl.Text = text
End Sub
或者如果您的“text”必须是Object类型:
Public Sub setControlText(ByVal ctrl As Control, ByVal value As Object)
If Not value Is Nothing Then ctrl.Text = value.ToString
End Sub
或者您可以使用反射来设置每个属性,但这不应该是标准的
Public Sub setProperty(ByVal obj As Object, ByVal propName As String, ByVal newValue As Object)
Dim prop As Reflection.PropertyInfo = obj.GetType().GetProperty(propName)
If Not prop Is Nothing AndAlso prop.CanWrite Then
prop.SetValue(obj, newValue, Nothing)
End If
End Sub
您可以通过以下方式调用此函数(请考虑属性名称区分大小写):
setProperty(Label1, "Text", "Hello World!")
答案 1 :(得分:1)
虽然您可以使用此转换和包装:
Dim objTemp As Object = CObj(Label1.Text)
或
Dim objTemp As Object = CType(Label1.Text, Object)
然后当你需要它时,只需用相反的
打开它Dim strTemp As String = CType(objTemp, String)
编辑:
如果您使用此wee函数并使用属性的字符串声明调用它,则可以动态编辑对象属性。
Public Shared Sub SetPropertyValue(ByVal o As Object, _
ByVal propertyName As String, ByVal newValue As Object)
Dim pi As Reflection.PropertyInfo
pi = o.[GetType]().GetProperty(propertyName)
If pi Is Nothing Then
Throw New Exception("No Property [" & propertyName & "] in Object [" & o.[GetType]().ToString() & "]")
End If
If Not pi.CanWrite Then
Throw New Exception("Property [" & propertyName & "] in Object [" & o.[GetType]().ToString() & "] does not allow writes")
End If
pi.SetValue(o, newValue, Nothing)
End Sub
呼叫:
SetPropertyValue(objTemp, "Phone", newVal)
或在Label1
的情况下:
Dim newVal as String = "Test"
SetPropertyValue(Label1, "Text", newVal)
希望有所帮助。