diff --git a/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs
new file mode 100644
index 00000000000..1180a2503f6
--- /dev/null
+++ b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Reflection.Metadata;
+using System.Reflection.Metadata.Ecma335;
+using System.Reflection;
+
+namespace MethodSignatureSnippets
+{
+ static class MethodSignatureSnippets
+ {
+ //
+ static BlobBuilder EncodeMethodSignatureParameterless()
+ {
+ // void Method()
+ var methodSignature = new BlobBuilder();
+
+ new BlobEncoder(methodSignature).
+ MethodSignature().
+ Parameters(0, returnType => returnType.Void(), parameters => { });
+
+ return methodSignature;
+ }
+
+ static BlobBuilder EncodeMethodSignaturePrimitiveTypes()
+ {
+ // double Method(double x, double y)
+ var methodSignature = new BlobBuilder();
+
+ new BlobEncoder(methodSignature).
+ MethodSignature().
+ Parameters(2, returnType => returnType.Type().Double(),
+ parameters => {
+ parameters.AddParameter().Type().Double();
+ parameters.AddParameter().Type().Double();
+ });
+
+ return methodSignature;
+ }
+
+ static BlobBuilder EncodeMethodSignatureClassType(MetadataBuilder metadataBuilder)
+ {
+ // void Method(System.Threading.Thread x)
+ var methodSignature = new BlobBuilder();
+
+ AssemblyReferenceHandle mscorlibAssemblyRef = metadataBuilder.AddAssemblyReference(
+ name: metadataBuilder.GetOrAddString("System.Threading.Thread"),
+ version: new Version(4, 0, 0, 0),
+ culture: default(StringHandle),
+ publicKeyOrToken: default(BlobHandle),
+ flags: default(AssemblyFlags),
+ hashValue: default(BlobHandle));
+
+ TypeReferenceHandle typeRef = metadataBuilder.AddTypeReference(
+ mscorlibAssemblyRef,
+ metadataBuilder.GetOrAddString("System.Threading"),
+ metadataBuilder.GetOrAddString("Thread"));
+
+ new BlobEncoder(methodSignature).
+ MethodSignature().
+ Parameters(1, returnType => returnType.Void(),
+ parameters => {
+ parameters.AddParameter().Type().Type(typeRef, false);
+ });
+
+ return methodSignature;
+ }
+
+ static BlobBuilder EncodeMethodSignatureModifiedTypes()
+ {
+ // void Method(ref int x, int[] y)
+ var methodSignature = new BlobBuilder();
+
+ new BlobEncoder(methodSignature).
+ MethodSignature().
+ Parameters(2, returnType => returnType.Void(),
+ parameters => {
+ parameters.AddParameter().Type(isByRef: true).Int32();
+ parameters.AddParameter().Type().SZArray().Int32();
+ });
+
+ return methodSignature;
+ }
+
+ public static BlobBuilder EncodeMethodSignatureGeneric()
+ {
+ // void Method(T x)
+ var methodSignature = new BlobBuilder();
+
+ new BlobEncoder(methodSignature).
+ MethodSignature(genericParameterCount: 1).
+ Parameters(1, returnType => returnType.Void(),
+ parameters => {
+ parameters.AddParameter().Type().GenericMethodTypeParameter(0);
+ });
+
+ return methodSignature;
+ }
+ //
+
+ public static void Run()
+ {
+ var metadataBuilder = new MetadataBuilder();
+ EncodeMethodSignatureParameterless();
+ EncodeMethodSignaturePrimitiveTypes();
+ EncodeMethodSignatureClassType(metadataBuilder);
+ EncodeMethodSignatureModifiedTypes();
+ EncodeMethodSignatureGeneric();
+ }
+ }
+}
diff --git a/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.csproj b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.csproj
new file mode 100644
index 00000000000..ddb344e65f4
--- /dev/null
+++ b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.csproj
@@ -0,0 +1,8 @@
+
+
+
+ Exe
+ net6.0
+
+
+
diff --git a/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/Program.cs b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/Program.cs
new file mode 100644
index 00000000000..be2bfe8bfc9
--- /dev/null
+++ b/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/Program.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace MethodSignatureSnippets
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ MethodSignatureSnippets.Run();
+ }
+ }
+}
diff --git a/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml b/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
index 37959e0f32a..04f005dc31e 100644
--- a/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
+++ b/xml/System.Reflection.Metadata.Ecma335/BlobEncoder.xml
@@ -244,7 +244,20 @@
to encode an instance method signature, to encode a static method signature.
Encodes method signature blob.
An encoder of the rest of the signature including return value and parameters.
- To be added.
+
+ class remarks.
+
+## Examples
+This example shows how to encode different method signatures:
+
+:::code language="csharp" source="~/snippets/csharp/System.Reflection.Metadata.Ecma335/BlobEncoder/MethodSignature/MethodSignatureSnippets.cs" id="SnippetEncodeSignatures":::
+
+ ]]>
+
is not in range [0, 0xffff].