2010-09-06 91 views
0

我有一個函數需要一個ref參數,並且希望在linq查詢中使用它,但是編譯器會抱怨。在linq中使用ref參數

該函數的調用特徵線和至多斷線成基於線路長度線,裁判參數用於保持它在哪裏在每次調用字符串中軌道:

string BreakLine(string text, int lineLimit, ref offset); 

查詢是:

from pt in productText 
let offset = 0 
from ll in lineLimits 
select new Line() { Text = BreakLine(pt, ll, ref offset) } 

(線路是一個簡單的數據類)

錯誤是:

「無法通過範圍變量'offset'作爲out或ref參數」

任何解決此問題的方法?

回答

1
Func<string, int, Line> lineFunc = (pt, ll) => 
{ 
    int offset = 0; 
    return new Line() { Text = BreakLine(pt, ll, ref offset) }; 
}; 
var test = from pt in productText 
      from ll in lineLimits 
      select lineFunc(pt, ll); 
1

參數offset沒有指定類型。嘗試改變BreakLine方法簽名到這一點:

string BreakLine(string text, int lineLimit, ref int offset); 

...但我想這只是在你的問題一個錯字。 真實您遇到的問題是您得到編譯器錯誤CS1939。從文檔引用:

範圍變量是在查詢 表達引入並作爲用於在 源序列中的每個連續元素的標識符 一個只讀 變量。因爲不能以任何方式修改 ,因此refout沒有指定 。 因此,兩個操作都不是 有效。

+0

我錯誤地離開了參數的類型,它實際上是因爲你擁有它。刪除ref關鍵字只會給出另一個錯誤,因爲它不符合方法簽名。 – user380689 2010-09-06 05:21:56