2016-03-15 88 views
1

給堆棧溢出我有這樣的代碼:的Visual Studio 2015年 - 編譯器上大流暢通話

SomeObject.MakeFluent() 
    .AddProperty(new MyProperty() { ... }) 
    .AddProperty(new MyProperty() { ... }) 
    .AddProperty(new MyProperty() { ... }) 
    .AddProperty(new MyProperty() { ... }) 
    .AddProperty(new MyProperty() { ... }) 
    //[+1024 times] 
    .AddProperty(new MyProperty() { ... }); 

在編譯,我得到一個錯誤CSC.EXE,堆棧溢出。如果我將鏈式方法調用更改爲:

var fluentAux = SomeObject.MakeFluent(); 
fluentAux.AddProperty(new MyProperty() { ... }); 
fluentAux.AddProperty(new MyProperty() { ... }); 
fluentAux.AddProperty(new MyProperty() { ... }); 

上述代碼正常工作。

有沒有辦法在VS2015的C#編譯器上配置max stack call?我問,因爲VS2013,這個問題不會發生。

VS2015編譯器的彈性變弱了嗎?

注:COMPILER返回'堆棧溢出',而不是我的程序。

+2

這似乎是一個很大的代碼味道。使用某種循環來添加屬性而不是添加1024個鏈式語句來做到這一點會更容易嗎? 'foreach(屬性中的var屬性){fluentAux.AddProperty(property); }' – mason

+0

[如何更改.NET程序的堆棧大小?](http://stackoverflow.com/questions/2556938/how-to-change-stack-size-for-a-net-program) – mason

+0

這個'AddProperty()'方法是如何實現的?流利與否,似乎沒有什麼在表面上被遞歸調用。也許'AddProperty()'做的比它應該做的要多得多。 –

回答