Контекст: консольное приложение C # / dotnet с использованием Google.Protobuf 3.6.1
Я хочу создать новый объект сообщения protobuf только с помощью MessageDescriptor, то есть типы сообщений неизвестны во время компиляции.
Один из способов сделать это:
IMessage message = (IMessage)Activator.CreateInstance(messageDescriptor.ClrType);
И отсюда появляется поддержка для манипулирования объектами сообщений во время выполнения, например,
FieldDescriptor fieldDescriptor = messageDescriptor.Fields[0];
fieldDescriptor.Accessor.SetValue(message, 123)
Быстрый поиск предполагает, что CreateInstance(Тип) не так эффективен, как время компиляции new Foo()
, поэтому мне было интересно, есть ли встроенная поддержка, которую мне не хватает, например, я надеялся на что-то вроде:
var msg = messageDescriptor.CreateMessage()
или
var msg = MessageBuilder.Create(messageDescriptor)
Activator.CreateInstance будет достаточно для моих нужд (то есть, более медленная производительность не является существенной проблемой в моем конкретном приложении / контексте), но я подумал, не упущен ли лучший / рекомендуемый подход.