У меня возникли проблемы с общими методами.Общие методы - Дублирование кода
У меня есть два класса, которые генерируются (они абсолютно одинаковы, но я не могу использовать код для использования одного и того же объекта класса).
здесь являются классы:
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# generics не являются шаблонами C++. Дженерики действительно _generic_; они сконструированы так, что их можно параметризовать с помощью ЛЮБОГО типа, по модулю определенных ограничений. Вы хотите что-то, что может быть построено только с одним из двух типов; дженерики не предназначены для этого. Ситуация, в которой вы оказались, очень печальна. Если вы могли бы сделать два сгенерированных типа реализовать общий интерфейс, то ваш метод может просто взять ссылку на то, что реализует этот интерфейс. –