2010-09-01 19 views
8

Bu çalışıyor: AncakSerialize Composed Func?

Func<string, string> func1 = s => s + "func"; 
    ViewState["function"] = func1; 

, bu etmez:

Func<string, string> func1 = s => s + "func"; 
    Func<string, string> func2 = s => func1(s); 

    ViewState["function"] = func2; 

Bir çalışma zamanı seri istisna atar: Şimdi Type 'MyProjectName._Default+<>c__DisplayClass3' in Assembly 'MyProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

, ben bu bu sefer geçici ama olabilir 'Bunun neden olduğunu anlamak isterim ki, eğer gelecekte, eğer serileştirmeden önce fonksiyonlar oluşturmaktan başka bir seçeneğim olmasaydı, bir çözüm bulacağım.

+1

Bir Func'i görüntülemeye seri hale getirme? Üzgünüm ama bu sadece kötü bir tasarım çığlık atıyor ve bunu tavsiye etmem. Uygulamaya çalıştığınız işlevselliği açıklayabilir misiniz, belki birisi daha iyi bir yaklaşım önerebilir. – Juliet

cevap

10

İkinci durumda olan şey, bir kapanışın söz konusu olmasıdır. func2'un içinde func1 kullanımı, lambdas ifadeleri arasındaki paylaşılan durumu ele geçirmek için bir kapatma oluşturur. Kapanışlar serileştirilemez. Func'yi denediğinde ve serileştirdiğinizde, kapanış olan hedef nesneyi serileştirmeye çalışır ve istisnayı alırsınız.

+0

İyi cevap! Bugün de aynı sorunu yaşadım ve kapatmaya çalışabildim, yeni yayınlanan sorumu http://stackoverflow.com/questions/26887460/do-closures-break-serialization. Burada belirttiğiniz şeyi doğrulamak için resmi referansınız var mı? Şimdiye kadar hiç bir şey bulamadım ... – chiccodoro