Создать анонимный тип из отражения ParamInfo [] - PullRequest
7 голосов
/ 24 октября 2010

Я хочу создать анонимный тип внутри функции, когда свойства анонимного типа являются параметрами функции.

например, для функции: private bool CreatePerson (строка FirstName, строка LasName, int Age, int height);

У меня будет анонимный тип со свойствами: FirstName, LasName, Age и height. а значения параметров функции будут значениями свойств анонимного типа.

private bool CreatePerson(string FirstName, string LasName, int Age, int height)
    {
        // Get this method parameters
        MethodBase currentMethod =  MethodBase.GetCurrentMethod();
        ParameterInfo[] parametersInfo = currentMethod.GetParameters();

        // create an object of the parameters from the function.
        foreach (ParameterInfo paramInfo in parametersInfo)
        {
            // add a property with the name of the parameter to an anonymous object and insert its value to the property.
            // WHAT DO I DO HERE?
            ....
        }

        return true;
    }

Ответы [ 2 ]

3 голосов
/ 24 октября 2010

Если я правильно понял и вы хотите определить свойства во время выполнения, это невозможно. Хотя в анонимных типах вы можете создавать типы, которые вы тут же определяете, присваивая значения, имя свойств должно быть известно в время компиляции .

Фактически, тип анонимен для вас, но не для CLR . Если вы посмотрите на сборку в ildasm.exe или рефлекторе, вы увидите эти анонимные типы со странными именами, в именах которых всегда стоит <>.

C # может помочь здесь динамикой, но, насколько мне известно, они помогают с связью с объектами, для которых у нас нет информации о типе, не создаются, но может быть что я не знаю.

0 голосов
/ 31 января 2011

Не могли бы вы использовать шаблон проектирования Linq to DataSet Field<T>(String Name)? На самом деле, почему бы просто не использовать DataTable. Компилятору не нужно знать, что поле существует, только то, какого типа оно должно быть безопасным. Одной из причин для этого может быть реализация некоторого типа синтаксического анализатора для генерации фильтров или динамическая настройка имен полей.

...