Передача параметра в делегирующую функцию - PullRequest
1 голос
/ 28 августа 2009

У меня сейчас есть это:

instance = new Class1<Type1>(
                 "param1",
                 () =>
                 new ViewDataDictionary<Type2>(
                     new Class2
                    {
                        Prop1= CreateList(new List<long> { 234 }),
                         Prop2= CreateList(new long[] { 234 })
                     }) );

Я хочу вместо этого передать переменную в функцию CreateList. Как то так

long p1 = 123;
instance = new Class1<Type1>(
                     "param1",
                     () =>
                     new ViewDataDictionary<Type2>(
                         new Class2
                        {
                            Prop1= CreateList(new List<long> { p1}),
                             Prop2= CreateList(new long[] { p1})
                         }) );

Но это дает мне ошибку сериализации, если Я пытаюсь сделать выше. Все классы помечены как сериализуемые.

1 Ответ

3 голосов
/ 28 августа 2009

Когда вы ссылаетесь на локальную переменную в лямбда-выражении, она генерирует замыкание (сгенерированный компилятором класс, который «захватывает» вашу локальную переменную как поле). Это закрытие не помечено как сериализуемое, поэтому сериализация завершается ошибкой ...

Вместо этого вы можете изменить тип лямбда-выражения для принятия параметра и передать значение в качестве отдельного параметра:

long p1 = 123;
instance = new Class1<Type1>(
                 "param1",
                 (prm) =>
                 new ViewDataDictionary<Type2>(
                     new Class2
                    {
                        Prop1= CreateList(new List<long> { prm }),
                         Prop2= CreateList(new long[] { prm })
                    }),
                 p1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...