本文整理汇总了C#中IProtoSerializer.EmitWrite方法的典型用法代码示例。如果您正苦于以下问题:C# IProtoSerializer.EmitWrite方法的具体用法?C# IProtoSerializer.EmitWrite怎么用?C# IProtoSerializer.EmitWrite使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IProtoSerializer
的用法示例。
在下文中一共展示了IProtoSerializer.EmitWrite方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WriteNullCheckedTail
internal void WriteNullCheckedTail(Type type, IProtoSerializer tail, Compiler.Local valueFrom)
{
if (type.IsValueType)
{
Type underlyingType = null;
#if !FX11
underlyingType = Helpers.GetUnderlyingType(type);
#endif
if (underlyingType == null)
{ // not a nullable T; can invoke directly
tail.EmitWrite(this, valueFrom);
}
else
{ // nullable T; check HasValue
using (Compiler.Local valOrNull = GetLocalWithValue(type, valueFrom))
{
LoadAddress(valOrNull, type);
LoadValue(type.GetProperty("HasValue"));
CodeLabel @end = DefineLabel();
BranchIfFalse(@end, false);
LoadAddress(valOrNull, type);
EmitCall(type.GetMethod("GetValueOrDefault", Helpers.EmptyTypes));
tail.EmitWrite(this, null);
MarkLabel(@end);
}
}
}
else
{ // ref-type; do a null-check
LoadValue(valueFrom);
CopyValue();
CodeLabel hasVal = DefineLabel(), @end = DefineLabel();
BranchIfTrue(hasVal, true);
DiscardValue();
Branch(@end, false);
MarkLabel(hasVal);
tail.EmitWrite(this, null);
MarkLabel(@end);
}
}