我正在尝试创建一个公共属性,该属性可以是long
或Guid
类型。泛型有可能吗?例如就像是
public virtual T where T: long or Gui Id { get; set; }
最佳答案
泛型有可能吗?
这是不可能的,但是您可以通过使用implicit operator
同时支持long
和Guid
(示例代码)来解决:
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/