【发布时间】:2018-12-17 17:50:20
【问题描述】:
上下文:使用 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 足以满足我的需求(即,在我的特定应用程序/上下文中,较慢的性能并不是一个重大问题),但我想知道我是否缺少更好/推荐的方法。
【问题讨论】:
标签: c# .net protocol-buffers