如何获得具有out参数的方法?

时间:2014-04-18 18:21:43

标签: c# reflection parameters out

我们假设我在一个类中有两个方法,如下所示:

class Foo
{
    public void Convert(string s, int x){ }

    public void Convert(string s, double x) { }
}

如果我使用:

var method = typeof (Foo)
            .GetMethod("Convert", new[] {typeof (string), typeof (int)});

我得到了正确的方法。但是,如果我更改x并在第一种方法中将其设为out参数:

public void Convert(string s, out int x) { }

然后我得到第二种方法Convert(string s, double x)

enter image description here

我不明白为什么它不返回第一种方法或至少null而不是第二种方法?第二种方法的签名与我提供的类型不匹配。如何在第二种情况下获得正确的方法?有没有办法直接得到它?我知道我可以获得所有方法,然后根据参数类型过滤它们,但我认为应该有一个直接的方法来做到这一点,我错过了它...

2 个答案:

答案 0 :(得分:5)

尝试使用MakeByRefType的{​​{1}}方法:

Type

答案 1 :(得分:1)

我弄清楚为什么它不会返回 null ,原因是 double int 之间存在隐式转换,这就是为什么它与第二种方法相匹配。

当我将第二种方法的参数更改为无法转换为int的类型时,例如。 DateTime,我得到null,当我尝试使用float时,我得到了相同的方法,因为int也可以转换为float