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