C#:如何通过存储在String中的名称获取对象?

是否可以在C#中按名称获取对象?

即使用。获取this.obj0

string objectName = "obj0"; executeSomeFunctionOnObject(this.someLoadObjectByName(objectName)); 

不,这不对。

对象没有名称 – 变量有。 对象可以由任意数量的变量引用:零,一个或多个。

但是,您可以做的是按名称获取字段(静态或实例变量)(使用Type.GetField )并获取这些字段的值(对于特定实例,如果您使用的是实例变量)。

根据您要执行的操作,您可能还需要考虑从名称到对象的字典。

不,并非所有对象都具有Name属性(对于初学者)。

但是您可以将感兴趣的对象存储在Dictionary 。 您还可以按名称获取Control,具体方法取决于UI库。

您无法按名称访问对象。 但是,使用reflection,您可以使用类的所有字段和属性(如果需要,可以按名称)。 如果您的对象存储在字段级变量或属性中,那么这将为您提供所需的内容:

 Type myType = typeof(MyClass); FieldInfo[] myFields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); PropertyInfo[] myproperties = myType.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); 

您还可以调用GetField和GetProperty(单数)并传入一个字符串,以使其返回与该名称匹配的单个成员(确保检查为null)。

阅读这些页面,了解有关在这种情况下使用的reflection方法的更多信息:

的getProperty

的GetProperties

getfield命令

getfield命令

好吧,我认为你在寻找的是反思。

你可以在这里看到一个很好的例子: http : //www.switchonthecode.com/tutorials/csharp-tutorial-using-reflection-to-get-object-information

如前所述 – 对象没有名称,但您可以遍历对象并获取其类型并相应地执行操作。

这篇博客显示了遍历和使用reflection的一个很好的例子。

这肯定是一个好的开始。 请享用!