当我不知道哪个属性时设置VB.NET对象属性

时间:2015-04-23 14:33:22

标签: asp.net vb.net

我有一个VB类。它很大,所以我在这里发布一个简化的例子:

Public Class ExampleClass
    Public Property Foo As String
    Public Property Bar As String
End Class

假设我有一个这样的文本文件:

foo,123
bar,456

我想阅读文件并相应地填充我的对象的属性。

我能想到的最简单的方法是添加一个带有case语句的方法,如下所示:

Public Class ExampleClass
    Public Property Foo As String
    Public Property Bar As String
    Public Sub SetProperty(prop As String, val As String)
        Select Case prop
            Case "Foo"
                Foo = val
            Case "Bar"
                Bar = val
        End Select
    End Sub
End Class

但是由于我的班级将拥有大约一百个属性,所以我的SetProperty程序将变得庞大而无聊,以便组合起来,并且可能不是最易于维护的。有更好的方法吗?

在你告诉我之前,我不应该以这种方式构建我的数据,我知道。但是,这是我必须要使用的遗留数据库表。我正在使用一些新的Entity Framework和LINQ代码更新应用程序,这将允许我删除一些非常难看的存储过程。

感谢您的帮助。

詹姆斯

1 个答案:

答案 0 :(得分:1)

您可以通过反射找到每个对象属性

    MyClass myClass = new MyClass();

    System.Reflection.PropertyInfo pi = myClass.GetType().GetProperty("Foo");

        if (pi  != null && pi.CanWrite)
        {
           //Check the type before assignment...
           if (pi.PropertyType.IsAssignableFrom(typeof(string)))
               pi.SetValue(myClass, value, null);
        }