gregoryyoung / nothing

Replacement of the System.Void type
The Unlicense
57 stars 11 forks source link

List of nothing like #37

Open dzmitry-lahoda opened 5 years ago

dzmitry-lahoda commented 5 years ago

Rx.Net: https://github.com/dotnet/reactive/blob/525b719f5e341a4c0cc6668028fdd15194de5559/Rx.NET/Source/src/System.Reactive/Unit.cs

System.Threading.Channels: https://github.com/dotnet/corefx/blob/master/src/System.Threading.Channels/src/System/VoidResult.cs

Other like:

var unitLike1 = new System.ValueTuple();
var unitLike2 = System.Threading.Tasks.Task.CompletedTask;
var unitLike3 = new  System.Threading.Tasks.ValueTask();
object unitLike4 = null;

F# unit

// Unit
using Microsoft.FSharp.Core;
using System;

[Serializable]
[CompilationMapping(SourceConstructFlags.ObjectType)]
public sealed class Unit : IComparable
{
    internal Unit()
    {
        ((object)this)..ctor();
    }

    public override int GetHashCode()
    {
        return 0;
    }

    public override bool Equals(object obj)
    {
        if (obj != null)
        {
            if (!LanguagePrimitives.IntrinsicFunctions.TypeTestGeneric<Unit>(obj))
            {
                return false;
            }
            return true;
        }
        return true;
    }

    private virtual int System-IComparable-CompareTo(object _obj)
    {
        return 0;
    }

    int IComparable.CompareTo(object _obj)
    {
        //ILSpy generated this explicit interface implementation from .override directive in System-IComparable-CompareTo
        return this.System-IComparable-CompareTo(_obj);
    }
}

C# void:

// Void
using System;
using System.Runtime.InteropServices;

/// <summary>Specifies a return value type for a method that does not return a value.</summary>
[Serializable]
[StructLayout(LayoutKind.Sequential, Size = 1)]
[ComVisible(true)]
[__DynamicallyInvokable]
public sealed class Void
{
}