在VB.NET中等于引用字符串名称?

时间:2014-11-05 15:49:14

标签: asp.net vb.net

新编辑:

这是我要避免的:

ViewDetail1.strFirstName = assignValue("strFirstName")
ViewDetail1.strLastName = assignValue("strLastName")
ViewDetail1.strStreet = assignValue("strStreet")
ViewDetail1.strCompany = assignValue("strCompany")

我宁愿把代码改为此,在哪里?知道字符串名称的神奇方法是:

ViewDetail1.strFirstName = assignValue(??)
ViewDetail1.strLastName = assignValue(??)
ViewDetail1.strStreet = assignValue(??)
ViewDetail1.strCompany = assignValue(?)

然后我的函数将根据我尝试分配的字符串名称返回值。

我的字符串名称已经在我的用户控件中定义,如下所示:

  Public Property strFirstName() As String
    Get
        Return Me._strFirstName
    End Get
    Set(ByVal value As String)
        Me._strFirstName = value
    End Set
End Property

Public Property strLastName() As String
    Get
        Return Me._strLastName
    End Get
    Set(ByVal value As String)
        Me._strLastName = value
    End Set
End Property


' Fields
Private _strFirstName As String
Private _strLastName As String

我的功能在哪里:

Function assignValue(strValue as string)
     Dim myColumn as string = strValue.Remove(3,0)
     'make call to database 
     strSQL = "SELECT " & myColumn & " FROM myTable WHERE ...." 
       database connections...
       myValue = myReader(myColumn)
      assignValue = myValue
End Function

请原谅我这是一个愚蠢的问题,还是我使用了错误的术语,但我希望有办法解决这个问题。我正在寻找一种方法来引用我试图赋值的字符串的名称而不必重新键入字符串名称。

我想使用一个函数,该函数将字符串的名称用作函数中的变量来确定最终值。我的字符串名称与数据字段列名称相关联。我正在填充用户控件。我想在此函数调用中输入下面带有问号的字符串的名称。没有必要重新键入字符串名称的任何方法吗?

ViewDetail1.myStringNameDataColumnA = assignValue(??)

我的字符串名称已在我的用户控件中定义。所以在上面的场景中,我将获取字符串的名称并运行一个函数来检查字符串名称并根据字符串的实际名称分配其值(因为它与预先存在的数据列名称相关)

2 个答案:

答案 0 :(得分:2)

对不起,代码不是魔术。如果不跳过严肃的箍,这是不可能的。如果代码可以自行编写,则不需要程序员。

ViewDetail1.strFirstName = assignValue(??)
ViewDetail1.strLastName = assignValue(??)
ViewDetail1.strStreet = assignValue(??)
ViewDetail1.strCompany = assignValue(?)

理论上,可以使用反射来加载程序集,查看分配的值,然后根据变量的名称查找值。但是这些代码很复杂,容易破解,并且不会提供任何价值而只是这样做:

ViewDetail1.strFirstName = assignValue("strFirstName")
ViewDetail1.strLastName = assignValue("strLastName")
ViewDetail1.strStreet = assignValue("strStreet")
ViewDetail1.strCompany = assignValue("strCompany")

也许您可以将其解析为view model,并传递视图模型(但在分配视图模型的属性时,您仍然会有类似ViewDetail1.strFirstName = assignValue("strFirstName")的代码)。

最终结果可能看起来像这样。

ViewDetail1.LoadDetails(viewModel)

答案 1 :(得分:1)

从您的问题来看,我相信您正在寻找Dictionary(Of String, String)

Dim fields As New Dictionar(Of String, String)()

fields.Add("CustomerName", "Fred Smith")

Dim name As String = fields("CustomerName")

如果这不是您正在寻找的内容,您可能需要澄清您的问题并添加其他详细信息。

编辑:

要获取"CustomerName"字符串,请在此处查看我的答案:How to get the Name of an application setting in C#?。这使用一些手法来获取属性的名称。实际上,由于它是在C#中,我将在这里复制它:

通话:

Dim name As String = fields(GetPropertyName(Function() ViewDetail1.myStringName))

神奇的例程:

Public Shared Function GetPropertyName(Of T)(expression As Expression(Of Func(Of T))) As String
    Dim body As MemberExpression = DirectCast(expression.Body, MemberExpression)
    Return body.Member.Name
End Function