我在掌握通用方法时遇到了麻烦。
我有两个生成的类(它们完全相同,但我不能反复使用同一个类对象的代码)。
这是课程:
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);
}
}
}
如何正确地投射结果以便我可以访问结果属性?
答案 0 :(得分:2)
您需要为Responses属性定义一个接口,然后指定T必须实现该接口(并且您的类确实实现了该接口)。
答案 1 :(得分:1)
我可能错了,但我不认为你可以纯粹用泛型来做。唯一的方法是对泛型类型参数进行限制,但由于您要访问的成员未在基类中声明,这对于您的两个类是常见的,因此很遗憾。