[英]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.