考虑这种类型,它是不可变的,我可以做到吗?
public struct SomeType
{
public const int OneValue = 1;
private static readonly one = new SomeType(one);
private readonly int value;
private SomeType(int value)
{
this.value = value;
}
public static One
{
get { return this.one; }
}
public static implicit operator int(SomeType source)
{
return source.value;
}
public void SomeSpecialization()
{
}
}
这允许我这样做,
var one = SomeType.One;
switch (one)
{
case SomeType.OneValue:
...
}
但是,无论如何我可以删除
public static implicit operator int(SomeType source)
{
return source.value;
}
从类型定义并使用这样的类型?
var one = SomeType.One;
switch (one)
{
case SomeType.One:
...
}
答案 0 :(得分:2)
case
语句中的switch
表达式只能是某些内置类型和enum
的编译时常量。所以答案是否定的:无论你对SomeType
做什么(没有把它变成enum
),你都不能将SomeType
个对象用作case
个表达式。< / p>
答案 1 :(得分:1)
如果您不使用Enum
,请尝试使用静态类:
public static class SomeType
{
public const int OneValue = 1;
public const int SecondValue = 2;
}
答案 2 :(得分:0)
这有什么帮助吗?
public struct SomeType<T> where T : IConvertible
{
private static readonly T _one = (T)Convert.ChangeType(1, typeof(T));
public static T One { get { return _one; } }
}