2017-04-01 82 views
1

我從C++切換到C#,並試圖學習這些方法。你能幫我創建一個方法,將2個變量作爲用戶的輸入嗎?在C++中,只需製作一個無效方法並在變量名稱前添加&,如:void Input(int &a, int &b),這將在主函數中保存其值的任何更改。有沒有辦法在C#中做到這一點?從C#中的用戶處獲取輸入的方法

+3

'&'是C#中的'ref'。 –

+0

或使用Tuple https://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx – brykneval

+0

@brykneval:元組是隻讀的afaik。 –

回答

2

在C#中,你必須對C的T &x ++兩種選擇:

  • ref參數 - 這些具有相同的功能,爲C++引用參數,並
  • out參數 - 這些允許將數據傳回從一種方法,而不是方法。

在你的情況,out是比較合適的,因爲它可以讓你通過那些以前沒有被轉讓變量:

void Input(out int a, out int b) { 
    ... // Read and assign a and b 
} 

您可以調用此方法是這樣的:

// In C# 7 
Input(out int a, out int b);  
// Prior to C# 7 
int a, b; 
Input(out a, out b); 

請注意,與C++不同的是,C#要求您使用關鍵字out來標記它。

+0

對於輸出參數,必須在函數成員正常完成之前爲其分配一個值。 – brykneval

+0

對於OP的問題,「出」是正確的答案嗎?他提到他想要改變用戶輸入的變量,這意味着變量已經被賦值。因此,'out'不起作用,應該使用'ref'? – Jurjen

+0

@brykneval權利,這正是執行輸入的方法應該發生的。 – dasblinkenlight

1

您可以使用ref (C# Reference)來實現此目的。這等於C++ &引用。

一個例子:

class RefExample 
{ 
    static void Method(ref int i) 
    { 
     // The following statement would cause a compiler error if i 
     // were boxed as an object. 
     i = i + 44; 
    } 

    static void Main() 
    { 
     int val = 1; 
     Method(ref val); 
     Console.WriteLine(val); 

     // Output: 45 
    } 
} 

值得一提的是的ref在C#中的用法應當是不同於C++非常罕見的。請參閱Jon Skeet's關於參數傳遞的文章。

0

在C#可以通過引用ref keyword傳遞參數。所以,你可以定義你的方法,如:

public void Input (ref int foo, ref int bar) { 
    foo = 14; 
    bar = 25; 
}

呼叫與ref關鍵字方法以及:

int a = 0; 
int b = 0; 
Input(ref a, ref b); 
// now a = 14 and b = 25

您提到這傳遞通過引用明確(但好處是,語法上很明顯這是通過引用)。