将参数传递给委托函数

时间:2009-08-28 14:59:39

标签: c# serialization delegates

我目前有这个:

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 个答案:

答案 0 :(得分:3)

当您在lambda表达式中引用局部变量时,它会生成一个闭包(一个编译器生成的类,它将您的局部变量“捕获”为一个字段)。此闭包未标记为可序列化,因此序列化失败...

相反,您可以更改lambda表达式的类型以接受参数,并将该值作为单独的参数传递:

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);