public record struct OrderId(int Value) {
public static explicit operator OrderId(int value)
return new OrderId { Value = value };
public static implicit operator int(OrderId value)
public record struct BookingId(int Value) {
public static explicit operator BookingId(int value)
return new BookingId { Value = value };
public static implicit operator int(BookingId value)
public static void Main()
var orderId1 = new OrderId(1);
var orderId2 = (OrderId)2;
int orderId4 = new OrderId(2);
Console.WriteLine(orderId1);
Console.WriteLine(orderId2);
Console.WriteLine(orderId3);
Console.WriteLine(orderId2 == orderId1);
Console.WriteLine(orderId3 == orderId2);
Console.WriteLine(orderId3 == orderId4);
var bookingId1 = new BookingId(1);
Console.WriteLine(bookingId1);
Console.WriteLine(bookingId1 == orderId1);
OrderId orderId8 = (OrderId)((int)bookingId1);
Console.WriteLine(orderId8);