Casting和Out参数

Won*_*ing 1 c# casting

我对铸造有一个疑问.

  public void Test(out T a, out T b)
    {

        object d,e;
        d = 10;
        e = 35;
        Console.WriteLine(d.GetType());
        a = (T)d;

        b = (T)e;

    }
Run Code Online (Sandbox Code Playgroud)

这里d.getType()将返回System.int32.所以我的问题是为什么我们不能直接编码像=(T)10; 我没有得到正确的帮助.请帮忙.谢谢.

Wel*_*bog 8

投射不起作用.T需要是System.int32的子类或超类才能在没有任何额外的运算符重载的情况下进行转换.

我假设T是int的某种包装器.您需要创建一个函数或构造函数来转换intT.这与铸造不一样.

您可以定义自己的显式运算符,为您执行此转换,语法将与您拥有的相同.但是你仍然需要自己定义转换.

像这样的东西:

public static explicit operator T (int original) {
    T t = new T();
    t.value = original;
    return t;
}
Run Code Online (Sandbox Code Playgroud)