【发布时间】:2009-05-22 05:00:27
【问题描述】:
我无法掌握通用方法。
我有两个生成的类(它们完全相同,但我无法反应代码以使用相同的类对象)。
这里是类:
public class1 : SoapHttpClientProtocol {
public partial class notificationsResponse {
private ResponseType[] responsesField;
private bool ackField;
/// <remarks/>
public ResponseType[] Responses {
get {
return this.responsesField;
}
set {
this.responsesField = value;
}
}
/// <remarks/>
public bool Ack {
get {
return this.ackField;
}
set {
this.ackField = value;
}
}
}
}
public class2 : SoapHttpClientProtocol {
public partial class notificationsResponse {
private ResponseType[] responsesField;
private bool ackField;
/// <remarks/>
public ResponseType[] Responses {
get {
return this.responsesField;
}
set {
this.responsesField = value;
}
}
/// <remarks/>
public bool Ack {
get {
return this.ackField;
}
set {
this.ackField = value;
}
}
}
}
你可以看到class1和class2是一样的;而且由于它们是内联类,因此我必须重复。
除此之外,我正在尝试使用这些类类型作为参数调用更新方法:
private void UpdateMessageResponses<T>(T results)
{
T responses = (T)results;
foreach (var accts in results.Responses)
{
int row = GetRowIdByAccountId(accts.ObjectId);
if (row != -1)
{
TestResultsGrid["Status", row].Value = String.Format("{0} {1} - {2} - {3}", accts.ResponseDate, accts.ObjectType, accts.Message, accts.ObjectId);
}
}
}
如何正确转换结果以便访问结果属性?
【问题讨论】:
-
要掌握的是 C# 泛型不是 C++ 模板。泛型是真正的泛型;它们被设计成可以用任何类型参数化,以某些约束为模。你想要的东西只能用两种类型中的一种来构造;泛型不是为此而设计的。你发现自己的处境非常不幸。如果你可以让两个生成的类型实现一个通用接口,那么你的方法可以只引用一个实现该接口的东西。