我正在尝试创建一个公共属性,该属性可以是longGuid类型。泛型有可能吗?例如就像是

public virtual T where T: long or Gui Id { get; set; }

最佳答案

泛型有可能吗?


这是不可能的,但是您可以通过使用implicit 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);
    }
}


现在您可以使用:

YourId id1 = Guid.NewGuid();
YourId id2 = long.MaxValue;

关于c# - 具有两种可能类型的通用属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12509436/

10-12 20:47