具有两种可能类型的通用属性

Гро*_*ный 2 .net c# generics

我正在尝试创建一个公共财产,它可以是类型longGuid. 泛型可以吗?例如类似的东西

public virtual T where T: long or Gui Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

cuo*_*gle 5

泛型可以吗?

这是不可能的,但您可以通过使用 useimplicit operator来支持longGuid,示例代码:

internal class YourId
{
    public long LongId { get; private set; }
     public Guid GuidId { get; private set; }

    public YourId(long longValue)
    {
        LongId = longValue;
    }

    public YourId(Guid guidValue)
    {
        GuidId = guidValue;
    }

    public static implicit operator long(YourId yourId)
    {
        return yourId.LongId;
    }

    public static  implicit operator YourId(long value)
    {
        return new YourId(value);
    }

       public static implicit operator Guid(YourId yourId)
    {
        return yourId.GuidId;
    }

    public static  implicit operator YourId(Guid value)
    {
        return new YourId(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用:

YourId id1 = Guid.NewGuid();
YourId id2 = long.MaxValue;
Run Code Online (Sandbox Code Playgroud)