gpt4 book ai didi

vb.net - GetProperty 方法对 VB 是否区分大小写?

转载 作者:行者123 更新时间:2023-12-04 16:40:56 24 4
gpt4 key购买 nike

我正在调试我正在处理的一个应用程序,并遇到了一个有趣的问题。对于那些不熟悉 VB.NET 的人来说,变量名不区分大小写。所以,

Dim foo As Integer
FOO = 5
System.Console.WriteLine(foO)

将编译并输出值 5。

无论如何,我正在处理的代码试图通过反射从属性中获取一个值,如下所示:
Dim value As Object = theObject.GetType().GetProperty("foo", BindingFlags.Public Or BindingFlags.Instance).GetValue(theObject, Nothing)

该代码在此行上引发了 NullReferenceException。在做了一些调试之后,我注意到返回 Nothing 的是 GetProperty 方法,所以 GetValue 正在轰炸。查看 theObject 的类,它有一个名为 的公共(public)属性。 “富” ,而不是 “富” (注意大小写的不同)。显然,由于我正在搜索小写的 foo,它根本无法通过反射找到该属性。

认为这是一些奇怪的侥幸,我创建了一个快速而肮脏的沙盒应用程序来测试这个发现:
Option Strict On
Option Explicit On

Imports System.Reflection

Module Module1

Sub Main()
Dim test As New TestClass
Dim propNames As New List(Of String)(New String() {"testprop", "testProp", "Testprop", "TestProp"})

'Sanity Check
System.Console.WriteLine(test.testprop)
System.Console.WriteLine(test.testProp)
System.Console.WriteLine(test.Testprop)
System.Console.WriteLine(test.TestProp)

For Each propName As String In propNames
Dim propInfo As PropertyInfo = test.GetType().GetProperty(propName, BindingFlags.Public Or BindingFlags.Instance)
If propInfo Is Nothing Then
System.Console.WriteLine("Uh oh! We don't have PropertyInfo for {0}", propName)
Else
System.Console.WriteLine("Alright, we have PropertyInfo for {0} and its value is: {1}", propName, propInfo.GetValue(test, Nothing))
End If
Next
End Sub

Public Class TestClass
Private _testProp As String = "I got it!"
Public Property TestProp() As String
Get
Return _testProp
End Get
Set(ByVal value As String)
_testProp = value
End Set
End Property
End Class

End Module

令我惊讶的是,输出如下:

I got it!
I got it!
I got it!
I got it!
Uh oh! We don't have PropertyInfo for testprop
Uh oh! We don't have PropertyInfo for testProp
Uh oh! We don't have PropertyInfo for Testprop
Alright, we have PropertyInfo for TestProp and its value is: I got it!


TL;博士

VB.NET 中的变量名通常不区分大小写。当涉及到属性名称时,Type 上的 GetProperty 方法似乎区分大小写。有没有办法将此方法称为“VB.NET 样式”并忽略大小写?还是我在这里是 SOL 并且需要应用 C# 心态并担心套管?

最佳答案

Variable names in VB.NET are typically case insensitive.



这是编译器完成的一个技巧。 CLR 本身区分大小写。由于反射与编译器无关,因此区分大小写。

Is there a way to call this method "VB.NET style" and ignore case?



是的。在您的 BindingFlags 中指定忽略大小写:
Dim propInfo As PropertyInfo = test.GetType().GetProperty(propName, BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.IgnoreCase)

关于vb.net - GetProperty 方法对 VB 是否区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com