Использование значения переменной в качестве имени переменной, для которой необходимо вернуть значение в C # - PullRequest
0 голосов
/ 12 января 2010

Я пишу веб-сервис для предоставления определенных фрагментов данных одному из наших сторонних приложений. Их команде требуется универсальный способ получения значений полей в нашей системе. Я написал класс, в котором единственными открытыми членами класса являются те значения, которые им нужны. Я хотел бы, чтобы они передавали перечисляемую строку, которая является именем члена, который они хотят получить, и, если это действительное имя открытого члена, возвращают значение этого члена. Я возился с некоторыми методами отражения в .net, но не могу понять, какое поведение я ищу. Я пытаюсь написать что-то, чтобы воссоздать функциональность этого псевдокода:

public Object webserviceMethodToReturnValue(Guid guidOfInternalObject, String nameOfProperty)
{
    internalObject obj = new internalObject(guid); //my internal company object, which contains all the public members the external company will need
    Object returnObject = obj.{nameOfProperty}; //where name of property is evaluated as the name of the member of the internalOject
    return returnObject; //returning an object that could be casted appropriately by the caller
}

Чтобы вы могли позвонить в службу как:

String companyName = (String)webserviceMethodToReturnValue(guid, "companyName");

Ответы [ 3 ]

4 голосов
/ 12 января 2010

Вам нужно вызвать метод GetProperty, например:

PropertyInfo property = typeof(InternalObject).GetProperty(nameOfProperty);
return property.GetValue(obj, null);

Остерегайтесь, что это будет не очень быстро.

Чтобы сделать это быстрее, вы можете использовать деревья выражений в .Net 3.5 для создания статически типизированных методов во время выполнения, которые возвращают значения.

1 голос
/ 12 января 2010
0 голосов
/ 12 января 2010

Да! Вы бы сделали это: typeof(InternalObject).GetProperty(nameOfProperty).GetValue(obj,null)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...