在C#中,我们可以这样做。
[Flags]
enum BeerProperty
{
Bold = 1,
Refreshing = 2
}
static void Taste(BeerProperty beer)
{
if (beer == (BeerProperty.Bold | BeerProperty.Refreshing))
{
Debug.WriteLine("I can't qutie put my finger on...");
}
}
static void Main(string[] args)
{
var tickBeer = BeerProperty.Bold | BeerProperty.Refreshing;
Taste(tickBeer);
}
在Kotlin中,似乎我不能“或”两个标志。Kotlin是如何做到这一点的?使用枚举变量列表?
enum class BeerProperty(value:Int)
{
Bold(1),
Refreshing(2)
}
fun taste(beer:BeerProperty)
{
if(beer == (BeerProperty.Bold | BeerProperty.Refreshing))
{
print("I can't qutie put my finger on...");
}
}
fun main(args: Array<String>)
{
val tickBeer = BeerProperty.Bold | BeerProperty.Refreshing;
taste(tickBeer);
}
补充:谢谢你的回答(由于时间限制,我还不能标记为答案)。我修改了下面的代码,实现了我想要的。
fun taste(beer: EnumSet<BeerProperty>)
{
if(beer.contains(BeerProperty.Bold) && beer.contains(BeerProperty.Refreshing))
{
print("I can't qutie put my finger on...");
}
}
fun main(args: Array<String>)
{
val tickBeer = EnumSet.of(BeerProperty.Bold, BeerProperty.Refreshing);
taste(tickBeer);
}
4条答案
按热度按时间0s7z1bwu1#
使用扩展函数
我使用扩展函数来允许添加属性,并使用和allof来检查是否设置了所有标志。
ggazkfy82#
事实上,在Kotlin中,每个枚举常量都是对应于该枚举的类的示例,并且不能使用'OR'来合并多个类示例。如果需要跟踪多个枚举值,最有效的方法是使用EnumSet class。
vmpqdwk33#
通过这种方式,可以实现与C#枚举标志相同的结果
使用方法:
wydwbb8l4#
我有一个简单的enum类:
我创造了一个类似于[Flags] enum的东西:
现在我可以使用: