我有一个自定义类DataLookupList,它有以下私有成员
private Func<TValue, TKey> m_selector;
我希望能够将其状态导出为XML(XML是一项要求,所以我不能使用二进制或其他东西),所以我可以在另一个地方导入该对象。 我似乎无法导出Func&lt;&gt;尽管如此。通过
将其导出到XML时new XElement( "Selector", m_selector )
我得到它的字符串表示形式是“System.Func`2 [System.Int32,System.Int32]”,但是当我尝试通过
导入它时TypeDescriptor.GetConverter( typeof( Func<TValue, TKey> ) ).ConvertFromString( element.Value )
我收到错误,因为无法解析“System.Func`2 [System.Int32,System.Int32]”。
是否可以将Func存储到字符串中,如果不是为什么?
答案 0 :(得分:2)
如果可以选择更改为Expression<Func<TValue, TKey>>
,请查看Serializing and Deserializing Expression Trees in C#
将Func<>
视为已编译的函数(如C#编译器生成的IL代码),而不是未编译的代码(如C#代码)。无法始终序列化和反序列化Func<>
。例如,以下Func<string>
来自lambda,并在此计算机上的此线程上读取并修改此方法中运行的i
变量。如果我将此Func
序列化,然后在另一台计算机上反序列化,那么i
应该读写什么?
void SomeMethod()
{
int i = 0;
Func<string> inc = () => (i++).ToString();
inc();
inc();
Console.WriteLine(i); // 2
}