背景: 使用Google.Protobuf 3.6.1的C# / dotnet控制台应用程序
我想根据MessageDescriptor实例化一个新的protobuf消息对象,即在编译时未知消息类型。
一种方法是:
IMessage message = (IMessage)Activator.CreateInstance(messageDescriptor.ClrType);
从这里开始,似乎支持对消息对象进行运行时操作,例如:
FieldDescriptor fieldDescriptor = messageDescriptor.Fields[0];
fieldDescriptor.Accessor.SetValue(message, 123)
快速搜索表明,CreateInstance(Type) 不如编译时的 new Foo()
高效,因此我想知道是否有内置支持我所不知道的,例如,我希望有这样的东西:
var msg = messageDescriptor.CreateMessage()
或者
var msg = MessageBuilder.Create(messageDescriptor)
对于我的需求,使用Activator.CreateInstance就足够了(即慢一些的性能在我的特定应用程序/上下文中不是一个重要问题),但我想知道是否有更好/推荐的方法。