簡體   English   中英

ref對象參數的方法

[英]method with ref object parameter

嗨,我必須調用具有此簽名的方法:

int MethodName(ref object vIndexKey)

如果我試着用它來打電話

String c = "690";

MethodName(ref (object) c);

它不起作用。

我能怎么做?

謝謝

你需要這樣做:

String c = "690"; 
object o = (object) c;
MethodName(ref o);

原因是該參數必須由函數分配。 該函數可以執行以下操作:

o = new List<int>();

如果底層類型是在方法調用期間已轉換為對象的字符串,則這是不可能的,因為賦值的目標仍然是字符串而不是對象。

當方法具有ref參數時,參數類型必須與參數類型完全匹配。 假設MethodName是這樣實現的:

public void MethodName(ref object x)
{
    x = new object();
}

如果你能用ref c調用它,你會發生什么? 它試圖將對普通System.Object的引用寫入System.String類型的變量,從而破壞類型安全性。

所以,你需要一個object類型的變量。 你可以這樣做,如klausbyskov的回答所示,但請注意,該值不會被復制回原始變量。 您可以使用強制轉換執行此操作,但請注意它可能會失敗:

string c = "690";
object o = c;
MethodName(ref o);
// This will fail if `MethodName` has set the parameter value to a non-null
// non-string reference
c = (string) o;

這是C#3.0規范的相關部分,第10.6.1.2節(強調我的):

當形式參數是引用參數時,方法調用中的相應參數必須包含關鍵字ref,后跟與形式參數相同類型的變量引用(第5.3.3節)。 必須明確賦值變量才能將其作為參考參數傳遞。

是否

MethodName(ref c);

不行?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM