如何将类传递给方法参数为泛型的方法

时间:2019-07-10 21:21:05

标签: c# generics

下面的方法在我的项目中使用不同的界面编写了12次不同的时间

ChannelFactory<interface>

和其他“用户”。

var user = new SomeWebServiceReference.User();

以下示例。

因此,我想在“ WebServiceAWI”接口和任何其他接口(例如WebServiceBW,WebServiceAWA)中传递一个通用类或类中的通用方法(不确定我需要什么)和“用户”,但我不确定该怎么做。

    // file 1
    public void TestSomething(string url)
    { 
        BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
        EndpointAddress endpoint = new EndpointAddress(url);

        var channelFactory = new ChannelFactory<WebServiceAWI>(binding, endpoint);

        var webservice = channelFactory.CreateChannel();

        var user = new User(); // from ServiceReferenceARM 
        user.UserName = webservice.EncryptValue("someone");
        user.Password = webservice.EncryptValue("password");

        WebServiceResult result = webservice.AttorneysGet(user);
    }

    // file 2
    public void TestSomething(string url)
    { 
        BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
        EndpointAddress endpoint = new EndpointAddress(url);

        var channelFactory = new ChannelFactory<WebServiceBW>(binding, endpoint);

        var webservice = channelFactory.CreateChannel();

        var user = new User(); // from ServiceReferenceBW
        user.UserName = webservice.EncryptValue("someone");
        user.Password = webservice.EncryptValue("password");

        WebServiceResult result = webservice.AttorneysGet(user);
    }

我认为我在界面上的定位是正确的,但是我不确定如何传递一个像普通类的类。

这是我到目前为止所拥有的。

这样称呼

TestTOSomething<WebServiceAWI, WebServicesTO.ServiceReferenceARM.User>(new ServiceReferenceARM.User(), url);

然后像这样实现它,但是我知道这是错误的。

    public void TestTOSomething<T, K>(K newUser, string url)
    {

        BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
        EndpointAddress endpoint = new EndpointAddress(url);

        var channelFactory = new ChannelFactory<T>(binding, endpoint);

        var webservice = channelFactory.CreateChannel();

        var user = newUser;
        user.UserName = webservice.EncryptValue("someone");
        user.Password = webservice.EncryptValue("password");

        WebServiceResult result = webservice.AttorneysGet(user);
    }

1 个答案:

答案 0 :(得分:0)

您可以为这些接口创建接口,然后在您的方法中引用它们。如果未使用newUser的泛型类型,则只需在参数中直接使用它即可。

对于WebServiceAWI,您需要使用where关键字定义该类型。

public void TestTOSomething<T>(IUser newUser, string url) where T : IWebServiceAWI