是否有可能在C#中按名称获取对象?C#:如何通过存储在String中的名称获取对象?
即得到this.obj0使用
string objectName = "obj0";
executeSomeFunctionOnObject(this.someLoadObjectByName(objectName));
是否有可能在C#中按名称获取对象?C#:如何通过存储在String中的名称获取对象?
即得到this.obj0使用
string objectName = "obj0";
executeSomeFunctionOnObject(this.someLoadObjectByName(objectName));
不,不是这样的。
对象没有名称 - 变量。一个对象可以被任意数量的变量引用:零,一个或多个。
什么你可以做,但是,是字段(静态或实例变量)的名称(用Type.GetField
)获得和(,对于一个特定的实例,如果你正在使用的实例变量)获得这些字段的值。
根据你想要做什么,你可能也想考虑从名字到对象的字典。
很少有人明确表示不能这样做,所以你可以继续前进,看看不同的方法。谢谢。 –
不,不是所有对象都有名称属性(对于初学者)。
但是,您可以将感兴趣的对象存储在Dictionary<string, object>
中。您也可以通过名称获得控件,确切的方法取决于UI库。
无法按名称访问对象。尽管如此,使用反射可以实现类的所有字段和属性(如果需要,可以按名称)。如果你的对象存储在现场级变量或属性,那么这会给你想要的东西:
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(单数),并通过在一个字符串使其返回与该名称匹配的单个成员(确保检查为空)。
阅读这些网页在这种情况下,对使用的反射方法的详细信息:
嗯,我想你在找什么因为是Reflection.
这里你可以看到一个很好的例子: http://www.switchonthecode.com/tutorials/csharp-tutorial-using-reflection-to-get-object-information
正如前面所说的 - 对象没有名字,但你可以穿越的对象,并得到他们的类型,采取相应的行动。
此博客here展示了遍历和反射使用的一个很好的示例。
这应该是一个很好的开始。 享受!
你不能遍历'所有对象'。 –
@Hank,为什么不呢?看我的版本。 –
yN2,OQ想要搜索所有'已加载'的对象(我认为)。这更接近垃圾收集而不是Reflection。 –
你能举一个这个名字如何映射到对象的例子吗?你在寻找一个对象实例还是一个类型?你想要现有的实例还是创建新的实例? –