C #: как получить объект по имени, хранящемуся в String?

c# .net reflection

14714 просмотра

4 ответа

возможно ли в C # получить объект по имени?

т.е. получить this.obj0 используя

string objectName = "obj0";
executeSomeFunctionOnObject(this.someLoadObjectByName(objectName));
Автор: disserman Источник Размещён: 12.11.2019 09:11

Ответы (4)


8 плюса

Решение

Нет, это не так.

У объектов нет имен - у переменных есть. На объект может ссылаться любое количество переменных: ноль, одна или несколько.

Однако вы можете получить поля (статические или переменные экземпляра) по имени (используя Type.GetField) и получить значения этих полей (для конкретного экземпляра, если вы используете переменные экземпляра).

В зависимости от того, что вы пытаетесь сделать, вы также можете рассмотреть словарь от имен до объектов.

Автор: Jon Skeet Размещён: 30.12.2009 07:06

1 плюс

Нет, не все объекты имеют свойство Name (для начала).

Но вы можете хранить интересующие вас объекты в Dictionary<string, object>. Вы также можете получить элемент управления по имени, точный метод будет зависеть от библиотеки пользовательского интерфейса.

Автор: Henk Holterman Размещён: 30.12.2009 07:07

0 плюса

Вы не можете получить доступ к объекту по имени. Используя отражение, вы можете использовать все поля и свойства класса (по имени, если хотите). Если ваш объект хранится в переменной уровня поля или в свойстве, то это даст вам то, что вы хотите:

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 (в единственном числе) и передать строку, чтобы она возвращала единственный элемент, соответствующий этому имени (обязательно проверьте на нулевое значение).

Прочитайте эти страницы для получения дополнительной информации о методах отражения использования в этой ситуации:

GetProperty

GetProperties

GetField

GetField

Автор: Gabriel McAdams Размещён: 30.12.2009 07:12

0 плюса

Ну, я думаю, что вы ищете, это отражение.

Вы можете увидеть хороший пример здесь: http://www.switchonthecode.com/tutorials/csharp-tutorial-using-reflection-to-get-object-information

Как уже говорилось ранее - у объектов нет имен, но вы можете перемещаться по объектам, получать их тип и действовать соответственно.

Этот блог здесь показывает очень хороший пример перемещения и использования отражения.

Это должно быть хорошим началом наверняка. Наслаждайтесь!

Автор: David Salzer Размещён: 30.12.2009 07:13
32x32