C#从Generic方法调用Generic方法

时间:2016-02-11 12:17:00

标签: c# generics

我怎么能这样做? 我找到How do I use reflection to call a generic method?但不确定这是我的情况。

public class XmlSerializer 
{
    public string Serialize<T>(T obj) where T : class
    {
        return string.Empty;
    }
}


class Program
{
    static void Main(string[] args)
    {
        MakeRequst<string>("value");
    }


    public static void MakeRequst<T>(T myObject)
    {
        var XmlSerializer = new XmlSerializer();
        XmlSerializer.Serialize<T>(myObject);
    }
}

1 个答案:

答案 0 :(得分:8)

调用另一个泛型方法的泛型方法与被调用的方法相比,可以减少约束:

public class Foo
{
    public void Bar1<T>() where T : class {}
    public void Bar2<T>() where T : class
    {
        Bar1<T>(); // same constraints, it's OK
    } 

    public void Bar3<T>() where T : class, ISomeInterface
    {
        Bar1<T>(); // more constraints, it's OK too
    }

    public void Bar4<T>()
    {
        Bar1<T>(); // less constraints, error
    }
}

此处Bar4方法会中断Bar1个约束,因为它允许您将值类型作为泛型参数传递,但Bar1方法不允许这样做。