Как создать экземпляр byte [] с лямбда-выражениями? - PullRequest
0 голосов
/ 25 февраля 2019

Приведенный ниже код отлично работает с большим количеством объектов в параметре "T".

ConstructorInfo constructorInfo = typeof(T).GetConstructor(Type.EmptyTypes);
NewExpression newExpression = Expression.New(constructorInfo);
dynamic instance = Expression.Lambda<Func<dynamic>>(newExpression).Compile()();

Но, если "T" - это байт [] , возникает исключение.

ArgumentNullException: Value cannot be null. Parameter name: construtor at Expression.New(ConstructorInfo consctructor)

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

Надеюсь, вы поможете мне решить эту ошибку.

1 Ответ

0 голосов
/ 25 февраля 2019

Вот решение для сохранения генерации универсального объекта даже с байтовым массивом.

T instance;

if (!typeof(T).IsArray)
{
    ConstructorInfo constructorInfo = typeof(T).GetConstructor(Type.EmptyTypes);
    NewExpression newExpression = Expression.New(constructorInfo);
    instance = Expression.Lambda<Func<T>>(newExpression).Compile()();
}
else
{
    NewArrayExpression newArrayExpression = Expression.NewArrayBounds(typeof(T).GetElementType(), Expression.Constant(0));
    instance = Expression.Lambda<Func<T>>(newArrayExpression).Compile()();
}

Спасибо за ваши комментарии, ребята.

...