2010-05-23 45 views
15

當然,即使我能做到這一點...通過引用這樣傳遞到一個進程的陣列上的SetLength

var 
    testarray : array of string; 

setlength(testarray, 5); 

,但如果我想聰明,有到我的傳遞數組的程序這樣的保證我不能這樣做!

procedure DoStuffWithArray(var passedarray : array of string); 
begin 
    setlength(passedarray, 5); 
end; 

編譯器在我的proc中的單行代碼中說'不兼容的類型'。

如果我在調用proc之前做了一個setlength,但我不能在我的proc中執行setlength,這就是我想要做的,我可以在set數組中設置其他元素。

任何幫助非常感謝,謝謝大家。

回答

16

作爲參數的數組類型需要有一個名稱。所以:

type TStringArray = array of string; 
procedure DoStuffWithArray(var passedarray: TStringArray); 

然後它會工作。

但是,如果您需要動態大小的字符串組,您可能會發現TStringList更容易使用。

+0

非常感謝梅森:) – csharpdefector 2010-05-23 01:48:03

+2

@Csharpdefetor - 如果你喜歡梅森的答案(這是一個很好的答案),那麼你應該接受它。你也會得到代表獎金。 – 2010-05-23 03:35:13

+2

這是由於Delphi語法中的歷史怪癖,因爲它對打開的數組參數使用相同的語法。見http://stackoverflow.com/questions/2112729/biggest-delphi-nitpicks/2113650#2113650 – 2010-05-23 08:54:28