正如你说你自己,这是很轻松的事情。例如:
public class StructWrapper<T> where T : struct
{
public T Value { get; private set; }
public StructWrapper(T val)
{
Value = val;
}
public static implicit operator T(StructWrapper<T> w)
{
return w.Value;
}
public static implicit operator StructWrapper<T>(T s)
{
return new StructWrapper<T>(s);
}
}
然后,你可以这样做:
var bw = new StructWrapper<bool>(true);
而且由于隐式转换,你可以做的东西,如:
if (bw)
{
Console.WriteLine("True!");
}
,它应该工作。
如果您需要/想实现平等,你可以添加这StructWrapper<T>
:
public override bool Equals(object obj)
{
if (obj is StructWrapper<T>)
{
return Value.Equals(((StructWrapper<T>)obj).Value);
}
return Value.Equals(obj);
}
public override int GetHashCode()
{
return Value.GetHashCode();
}
public static bool operator ==(StructWrapper<T> a, StructWrapper<T> b)
{
if (System.Object.ReferenceEquals(a, b))
{
return true;
}
if (((object)a == null) || ((object)b == null))
{
return false;
}
return a.Value.Equals(b.Value);
}
public static bool operator !=(StructWrapper<T> a, StructWrapper<T> b)
{
return !(a == b);
}
public static bool operator ==(StructWrapper<T> a, T b)
{
return a.Value.Equals(b);
}
public static bool operator !=(StructWrapper<T> a, T b)
{
return !(a == b);
}
public static bool operator ==(T b, StructWrapper<T> a)
{
return a.Value.Equals(b);
}
public static bool operator !=(T b, StructWrapper<T> a)
{
return !(a == b);
}
这将让你做这样的事情:
var isbwTrue = bw == true;
哦,ayaahahah!免费积分.. SO可以作为扶手椅使用。 – user2864740
问题是**为什么**添加了这个约束。创建一个包装价值类的类是非常容易的,但为了满足这个奇怪的要求,必须提供什么? –
*当然,创建一个自定义类很简单*我可能会这么做。 –