C# 从一个类转换到另一个类

C# 从一个类转换到另一个类,c#,asp.net,.net,C#,Asp.net,.net,我正在调用一个webservice,它返回四个自定义类之一的数组。 所有类都有相同的内部内容-一个字符串名为Description,另一个字符串名为Value。 我试图编写一个方法,可以接受这四个类中的任何一个,并将其内容放入下拉列表的数据源中 有没有办法将未知的复合类转换为具有相同内容的指定类?还是把里面的东西去掉 或者我必须用不同的数据类型编写四个相同的函数 编辑:添加代码 实际上,该控件需要一个IEnumerable作为数据源,然后可以指定and: 正如您所看到的,数组的实际类型并不重要

我正在调用一个webservice,它返回四个自定义类之一的数组。 所有类都有相同的内部内容-一个字符串名为Description,另一个字符串名为Value。 我试图编写一个方法,可以接受这四个类中的任何一个,并将其内容放入下拉列表的数据源中

有没有办法将未知的复合类转换为具有相同内容的指定类?还是把里面的东西去掉

或者我必须用不同的数据类型编写四个相同的函数

编辑:添加代码

实际上,该控件需要一个
IEnumerable
作为数据源,然后可以指定and:

正如您所看到的,数组的实际类型并不重要,只要它有
Value
Description
属性来绑定它。

实际上,控件要求您使用
IEnumerable
作为数据源,然后您可以指定和:


正如您所看到的,数组的实际类型并不重要,只要它有
Value
Description
属性来绑定它。

您可以定义一个由所有四个类(例如IDescriptionValue)实现的接口,并编写一个接受该类型参数的方法,例如:

public interface IDescriptionValue
{
public string Description {get;set;}
public string Value {get;set;}
}

public class CustomClass1 : IDescriptionValue{
public string Description {get;set;}
public string Value {get;set;}
}
//snip...
public class CustomClass4 : IDescriptionValue{
public string Description {get;set;}
public string Value {get;set;}
}
//accepts parameters of type IDescriptionValue
public void setDropdownData(IDescriptionValue inputData){
// your code here
}

您可以定义一个由所有四个类(例如IDescriptionValue)实现的接口,并编写一个接受该类型参数的方法,例如:

public interface IDescriptionValue
{
public string Description {get;set;}
public string Value {get;set;}
}

public class CustomClass1 : IDescriptionValue{
public string Description {get;set;}
public string Value {get;set;}
}
//snip...
public class CustomClass4 : IDescriptionValue{
public string Description {get;set;}
public string Value {get;set;}
}
//accepts parameters of type IDescriptionValue
public void setDropdownData(IDescriptionValue inputData){
// your code here
}

包装器就可以了,您有两种方法:

public class WSData
{
    public string Value;
    public string Description;

    // First approach: single ctor with dynamic parameter
    public WSData(dynamic source)
    {
        this.Value = source.Value;
        this.Description = source.Description;
    }

    // ----- or --------

    // Second approach: one ctor for each class
    public WSData(FirstTypeFromWS source)
    {
        this.Value = source.Value;
        this.Description = source.Description;
    }
    public WSData(SecondTypeFromWS source)
    {
        this.Value = source.Value;
        this.Description = source.Description;
    }
}
用法相同:

WSData yourData = new WSData(data_retrieved_from_service);
// now, bind the WSData object: you have abstracted yourself from
// the service and as a bonus your code can be attached elsewhere more easily

包装器就可以了,您有两种方法:

public class WSData
{
    public string Value;
    public string Description;

    // First approach: single ctor with dynamic parameter
    public WSData(dynamic source)
    {
        this.Value = source.Value;
        this.Description = source.Description;
    }

    // ----- or --------

    // Second approach: one ctor for each class
    public WSData(FirstTypeFromWS source)
    {
        this.Value = source.Value;
        this.Description = source.Description;
    }
    public WSData(SecondTypeFromWS source)
    {
        this.Value = source.Value;
        this.Description = source.Description;
    }
}
用法相同:

WSData yourData = new WSData(data_retrieved_from_service);
// now, bind the WSData object: you have abstracted yourself from
// the service and as a bonus your code can be attached elsewhere more easily

如果您提供一些代码,这将非常有用。您可以使用
动态
。您可以在所有类上放置一个接口并使用它。或者你可以使用Automapper如果你提供一些代码会很有帮助。你可以使用
dynamic
。你可以在所有类上放置一个接口并使用它。或者您可以使用Automapper,这四个类是由web服务定义的(这不是我写的)。如果需要刷新服务引用,我不想更改类定义,因为这样我将丢失修改。这四个类是由web服务定义的(不是我编写的)。我不想在需要刷新服务引用的情况下更改类定义,因为这样会丢失修改。