private static void Foo(Exception e)
{
e = new Exception("msg1");
}
static void Main(string[] args)
{
try
{
int zero = 0;
int ecks = 1/zero;
}
catch (Exception e)
{
// I thought Exception is passed by reference, therefore Foo changes e to
// point to new Exception instance with message "msg1".
// But it stays the same
Foo(e);
throw e;
}
}
它適用於類向方法傳遞例外
public class MyClass
{
public string Name { get; set; }
}
private static void Foo(MyClass m) { m.Name = "bar"; }
static void Main(string[] args)
{
Voda v = new Voda();
v.Name = "name";
Foo(v); // v.Name gets value "bar"
}
根據msdn例外是類。
編輯
private static void Foo(Exception e)
{
while (e != null && e.InnerException != null)
{
// I'm changing where e points.
// Therefore caller Exception should now point to most inner exception
e = e.InnerException;
});
}
使用ref關鍵字:無效美孚(REF例外五) – Evk
除非你使用'ref', C#中沒有任何內容是通過引用傳遞的。對於參考類型,數據的_reference_被複制到方法中。所以你可以改變對象(如果它是可變的),但你不能在調用方法中改變變量 – MAV
不是真的重複,但[看看](http://stackoverflow.com/q/186891/1997232)。 – Sinatr