2017-08-29 71 views
1

我正在將我們的一個node.js Azure函數移植到C#中,因此這是在.csx容器中運行的C#。我在本地的Windows函數模擬器中運行,並且在Azure的Functions運行時也嘗試了這兩個函數,兩者都顯示相同的編譯器錯誤。如何在C#Azure函數中將多個參數作爲數組傳遞?

我見過multipleotherquestions問類似的東西,但似乎有一些關於在.csx文件或功能,運行時運行的一切答案的工作不同。

這是我打電話的方法簽名:

DocumentClient.ExecuteStoredProcedureAsync<TValue> Method (Uri, Object[]) 

這是run.csx工作代碼:

string param1 = "param1"; 
string param2 = "param2"; 

// object[] params = {"param1", "param2"}; 

var response = await client.ExecuteStoredProcedureAsync<object>(
    sprocUri, 
    param1, 
    param2 
); 

當我嘗試將兩個參數添加到一個數組並取消註釋行object[] params = {"param1", "param2"};然後我得到這個錯誤從編譯器:

run.csx(72,14): error CS1001: Identifier expected 
run.csx(72,14): error CS1003: Syntax error, ',' expected 
run.csx(72,21): error CS1002: ; expected 
run.csx(72,21): error CS1525: Invalid expression term '=' 
run.csx(72,23): error CS1525: Invalid expression term '{' 
run.csx(72,23): error CS1002: ; expected 
run.csx(72,32): error CS1002: ; expected 
run.csx(72,32): error CS1513: } expected 
run.csx(72,42): error CS1002: ; expected 
Compilation failed. 

(線72對應於數組賦值語句)

我已經嘗試了所有這些不同的方式來定義數組,但我得到類似的錯誤每個:

Object[] params = {"param1", "param2"}; 
object[] params = new[] {"param1", "param2"}; 
object[] params = new[] {param1, param2}; 
string[] params = {"param1", "param2"}; 
string[] params = new string[] {"param1", "param2"}; 
dynamic[] params = new[] {"param1", "param2"}; 

是否有一些關於它需要Azure的功能不同數組定義的不同風格?關於C# Developer Reference中的數組沒有任何提及。

回答

2

您面臨的問題是,您將變量params命名爲C#中的保留字(請參閱params (C# reference))。嘗試使用不同的名稱。

如果你要真正建立在使用params,你可能使用@前綴,可以在C#中被用來創建這將是一個保留字,否則標識符:

object[] @params = { param1, param2 }; 
+0

謝謝,我把它改成參數,它現在完美。 – Graham

+0

出於好奇,在方法調用中使用ArrayList而不是對象數組有沒有祕密? – Graham

+0

@Graham不,它應該是相同的:'var args = new ArrayList {param1,param2};' - 只要該方法以'ArrayList'作爲參數,當然。說起'ArrayList'的,那是你主要看不到過去的C#和/或遺留代碼的第一個版本的類。這可能是更地道使用'名單'來表達「我真的不知道類型」,而不是「有一些類型,但我無法表達它」 ArrayList'的'語義。但是,只有您可以更改方法簽名。 –

相關問題