RecreateWith<Record, Field>
RecreateWith<Record, Field> is delegate type that recreates record at 'ref' pointer with one field modified.
/// <summary>Create new instance of <paramref name="record"/> with value <paramref name="newValue"/>.</summary>
public delegate void RecreateWith<Record, Field>(ref Record record, Field newValue);
RecreateWith.TryCreateRecreateWith(this fieldDescription, out delegate) tries to create RecreateWith<Record, Field, Record> delegate.
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
fieldDescription.TryCreateRecreateWith(out Delegate @delegate);
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)@delegate;
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
public struct MyStruct
{
[DataMember(Order = 0)]
public readonly int value;
[DataMember(Order = 1)]
public readonly string name;
public MyStruct(int value, string name)
{
this.value = value;
this.name = name;
}
}
RecreateWith.Create[fieldDescription] is a provider that creates new read delegates.
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)RecreateWith.Create[fieldDescription];
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
RecreateWith.Cached[fieldDescription] is a provider that creates and caches read delegates.
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)RecreateWith.Cached[fieldDescription];
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
RecreateWith.CreateFromObject[memberInfo] is a provider that creates new read delegates from FieldInfo and PropertyInfo.
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)RecreateWith.CreateFromObject[fi];
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
RecreateWith.CachedFromObject[memberInfo] is a provider that creates and caches read delegates from FieldInfo and PropertyInfo.
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)RecreateWith.CachedFromObject[fi];
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
Func<Record, Field, Record>
RecreateWith.TryCreateRecreateWithFunc(this fieldDescription, out delegate) tries to create RecreateWith<Record, Field, Record> delegate.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
fieldDescription.TryCreateRecreateWithFunc(out Delegate @delegate);
// Cast delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)@delegate;
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
public class MyClass
{
[DataMember(Order = 0)]
public readonly int value;
[DataMember(Order = 1)]
public readonly string name;
public MyClass(int value, string name)
{
this.value = value;
this.name = name;
}
}
RecreateWithFunc.Create[fieldDescription] is a provider that creates new read delegates Func<Record, Field, Record>.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)RecreateWithFunc.Create[fieldDescription];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
RecreateWithFunc.Cached[fieldDescription] is a provider that creates and caches read delegate.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)RecreateWithFunc.Cached[fieldDescription];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
RecreateWithFunc.CreateFromObject[memberInfo] is a provider that creates new read delegates from FieldInfo and PropertyInfo.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Create delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)RecreateWithFunc.CreateFromObject[fi];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
RecreateWithFunc.CachedFromObject[memberInfo] is a provider that creates and caches read delegates from FieldInfo and PropertyInfo.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Create delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)RecreateWithFunc.CachedFromObject[fi];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
Func<object, object, object>
RecreateWith.TryCreateRecreateWithFuncOOO(this fieldDescription, out delegate) tries to create RecreateWith<Record, Field, Record> delegate.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
fieldDescription.TryCreateRecreateWithFuncOOO(out Func<object, object, object> recreate);
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass)recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
RecreateWithFuncOOO.Create[fieldDescription] is a provider that creates new read delegates Func<object, object, object>.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
Func<object, object, object> recreate = RecreateWithFuncOOO.Create[fieldDescription];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass) recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
RecreateWithFuncOOO.Cached[fieldDescription] is a provider that creates and caches read delegates.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
Func<object, object, object> recreate = RecreateWithFuncOOO.Cached[fieldDescription];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass)recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
RecreateWithFuncOOO.CreateFromObject[memberInfo] is a provider that creates new read delegates from FieldInfo and PropertyInfo.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Create delegate
Func<object, object, object> recreate = RecreateWithFuncOOO.CreateFromObject[fi];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass)recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
RecreateWithFuncOOO.CachedFromObject[memberInfo] is a provider that creates and caches read delegates from FieldInfo and PropertyInfo.
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Create delegate
Func<object, object, object> recreate = RecreateWithFuncOOO.CachedFromObject[fi];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass)recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
Full Example
Full example
using System;
using System.Reflection;
using System.Runtime.Serialization;
using Avalanche.Utilities.Record;
using static System.Console;
class recreatewith
{
public static void Run()
{
// RecreateWith<Record, Field>
{
// <00>
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
fieldDescription.TryCreateRecreateWith(out Delegate @delegate);
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)@delegate;
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
// </00>
}
{
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// <01>
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)RecreateWith.Create[fieldDescription];
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
// </01>
}
{
// <02>
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)RecreateWith.Cached[fieldDescription];
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
// </02>
}
{
// <03>
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)RecreateWith.CreateFromObject[fi];
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
// </03>
}
{
// <04>
// Get field reference
FieldInfo fi = typeof(MyStruct).GetField(nameof(MyStruct.value))!;
// Cast delegate
RecreateWith<MyStruct, int> recreate = (RecreateWith<MyStruct, int>)RecreateWith.CachedFromObject[fi];
// Create struct
MyStruct myStruct = new MyStruct(2, "abc");
// Recreate record
recreate(ref myStruct, 10);
// Print value
WriteLine(myStruct.value); // 10
// </04>
}
// Func<Record, Field, Record>
{
// <10>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
fieldDescription.TryCreateRecreateWithFunc(out Delegate @delegate);
// Cast delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)@delegate;
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </10>
}
{
// <11>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)RecreateWithFunc.Create[fieldDescription];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </11>
}
{
// <12>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)RecreateWithFunc.Cached[fieldDescription];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </12>
}
{
// <13>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Create delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)RecreateWithFunc.CreateFromObject[fi];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </13>
}
{
// <14>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Create delegate
Func<MyClass, int, MyClass> recreate = (Func<MyClass, int, MyClass>)RecreateWithFunc.CachedFromObject[fi];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </14>
}
// Func<object, object, object>
{
// <20>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
fieldDescription.TryCreateRecreateWithFuncOOO(out Func<object, object, object> recreate);
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass)recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </20>
}
{
// <21>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
Func<object, object, object> recreate = RecreateWithFuncOOO.Create[fieldDescription];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass) recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </21>
}
{
// <22>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Convert to description
IFieldDescription fieldDescription = FieldDescription.CachedWithRecord[fi];
// Create delegate
Func<object, object, object> recreate = RecreateWithFuncOOO.Cached[fieldDescription];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass)recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </22>
}
{
// <23>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Create delegate
Func<object, object, object> recreate = RecreateWithFuncOOO.CreateFromObject[fi];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass)recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </23>
}
{
// <24>
// Get field reference
FieldInfo fi = typeof(MyClass).GetField(nameof(MyClass.value))!;
// Create delegate
Func<object, object, object> recreate = RecreateWithFuncOOO.CachedFromObject[fi];
// Create class
MyClass myClass = new MyClass(2, "abc");
// Recreate record
myClass = (MyClass)recreate(myClass, 10);
// Print value
WriteLine(myClass.value); // 10
// </24>
}
}
// <100>
public class MyClass
{
[DataMember(Order = 0)]
public readonly int value;
[DataMember(Order = 1)]
public readonly string name;
public MyClass(int value, string name)
{
this.value = value;
this.name = name;
}
}
// </100>
// <101>
public struct MyStruct
{
[DataMember(Order = 0)]
public readonly int value;
[DataMember(Order = 1)]
public readonly string name;
public MyStruct(int value, string name)
{
this.value = value;
this.name = name;
}
}
// </101>
}