Я пытаюсь сериализовать MailMessage
объектов. Для этого класс SerializableMailMessage
был реализован предыдущим разработчиком (показано ниже).Почему мои статические неявные операторы жалуются, что в одном классе нет тела, а не еще
Чтобы исправить ошибки, я перехожу из двоичного файла Iformatter
в json Iformatter
. У Json есть некоторые проблемы с NameValueCollections
, поэтому мне нужно было создать новый serializableMailMessage
для обработки преобразования.
Здесь возникает проблема. Если я скопирую и вставляю приведенный ниже код в новый класс и не вношу никаких изменений, внезапно 2 публичных статических неявных оператора начинают жаловаться, что им нужен орган, потому что они не помечены как абстрактные, внешние или частичные.
Если я даю им тело, например.
public static implicit operator MailMessage(SerializableMailMessage message){};
Им нужно вернуть значение. Единственное значение, которое я мог бы подумать о возврате, - это сообщение, но это создает исключение StackOverFlowException.
Может ли кто-нибудь объяснить мне, что здесь может быть? Почему это нормально, если не быть телом в нижнем коде, но не в порядке в одном классе? Как мне обойти проблему?
using System.Collections.Specialized;
using System.Net.Mail;
using System.Text;
namespace S22.Mail
{
//
// Summary:
// A serializable replication of the MailMessage class of the System.Net.Mail namespace.
// It implements conversion operators to allow for implicit conversion between SerializableMailMessage
// and MailMessage objects.
public class SerializableMailMessage
{
public SerializableAlternateViewCollection AlternateViews { get; }
public SerializableAttachmentCollection Attachments { get; }
public SerializableMailAddressCollection Bcc { get; }
public string Body { get; set; }
public Encoding BodyEncoding { get; set; }
public SerializableMailAddressCollection CC { get; }
public DeliveryNotificationOptions DeliveryNotificationOptions { get; set; }
public SerializableMailAddress From { get; set; }
public NameValueCollection Headers { get; }
public Encoding HeadersEncoding { get; set; }
public bool IsBodyHtml { get; set; }
public MailPriority Priority { get; set; }
public SerializableMailAddress ReplyTo { get; set; }
public SerializableMailAddressCollection ReplyToList { get; }
public SerializableMailAddress Sender { get; set; }
public string Subject { get; set; }
public Encoding SubjectEncoding { get; set; }
public SerializableMailAddressCollection To { get; }
public static implicit operator SerializableMailMessage(MailMessage message);
public static implicit operator MailMessage(SerializableMailMessage message);
}
}
Почему вы думаете, что эти операторы * не * нужно тело? Что вы ожидаете от них, если вы не обеспечиваете реализацию для этих операторов? – Servy
Каким образом MailMessage может быть магическим приложением для Serializablemailmessage или наоборот без тела и возвращаемого значения для операторов? Вам нужно сделать это преобразование внутри этих операторов и вернуть значение конвертированного значения. –
@TimSchmelter Этот код никогда бы не скомпилировался. – Servy