我目前有这个:
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})
}) );
但它给了我序列化错误 我试着做上面的事情。所有课程 标记为可序列化。
答案 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);