Как сделать красиво?
От: Dufrenite Дания  
Дата: 15.09.07 16:03
Оценка:
Требуется сгенерировать оператор десериализации для заданного поля. Пусть сигнатура метода будет следующей:
private сгенерироватьОператор(поле : IField) : PExpr
{
}

Оператор десериализации различен для каждого типа. Например для типа int мы должны получить:
def _поле1 = reader.ReadInt32();

для типа float:
def _поле1 = reader.ReadSingle();

и так далее...
Вопрос: как красиво сделать сопоставление с образцом в методе сгенерироватьОператор()?
На данный момент мне в голову ничего не приходит кроме этого:
private сгенерироватьОператор(поле : IField) : PExpr
{
    def имя = Macros.UseSiteSymbol(поле.Name);
    match (поле.GetMemType().SystemType.FullName)
    {
        | "System.Byte" => <[ def $(имя : name) = reader.ReadByte() ]>;
        | "System.SByte" => <[ def $(имя : name) = reader.ReadSByte() ]>;
        | "System.Int16" => <[ def $(имя : name) = reader.ReadInt16() ]>;
        | "System.UInt16" => <[ def $(имя : name) = reader.ReadUInt16() ]>;
        | "System.Int32" => <[ def $(имя : name) = reader.ReadInt32() ]>;
        | "System.UInt32" => <[ def $(имя : name) = reader.ReadUInt32() ]>;
    }
}

что выглядит совершенно по дилетантски...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.