【问题标题】:Alternative to operand && (C#)操作数 && 的替代方法 (C#)
【发布时间】:2016-10-26 15:12:55
【问题描述】:

所以我正在尝试用 && 编写代码。但是,当我输入它时,它说我无法将操作数应用于它。

具体来说,它的内容是:运算符“&&”不能应用于“Server.Enums.PokemonType”和“Server.Enums.PokemonType”类型的操作数

但是,我需要能够链接这两个东西,这样我才能使代码成为两个PokemonTypes。那么有什么替代方法或解决方法可以解决无法使用 && 的问题吗?

如果你需要,这是我的代码:

case 225: 
{
    //Flying Press -- INCOMPLETE, needs Flying-type
    setup.Move.Element = Enums.PokemonType.Fighting && setup.Move.Element = Enums.PokemonType.Flying;
    if (setup.Defender.VolatileStatus.GetStatus("Minimize") != null) 
    {
        setup.Multiplier *= 2;
        setup.Move.Accuracy = -1;
    }
}
break;

【问题讨论】:

  • 这不是类型和运算符的工作方式。您需要一个集合或位掩码。
  • 你将不得不改变你的枚举来获得组合,枚举的意义在于它是可枚举的,并且一个属性一次只能使用一个值
  • 你想做什么?
  • 您需要== 而不是=。单个等号是在做赋值,而不是布尔比较,&& 期望两边都有布尔值
  • @AlfieGoodacre 使用[Flags]的除外

标签: c# operands


【解决方案1】:

系统定义的&& 运算符只支持布尔操作数。 & 运算符将适用于枚举(因为它也适用于枚举所基于的所有整数类型)。当然,如果您想要一个表示两个标志值组合的枚举,那么您需要将它们组合在一起(使用|),而不是将它们组合在一起。

【讨论】:

  • 我这样做了,但现在我收到一条错误消息,提示“赋值的左侧必须是变量、属性或索引器”。你介意解释一下这是什么意思吗? ^^;但是,是的,我正在尝试合并枚举。使它们都适用于这种情况。 “飞按”这个动作既是格斗型又是飞行型的,所以我正在努力研究如何做到这一点。
  • @Foxwells 这意味着您正在尝试为无法分配值的事物分配值。
  • 啊...有道理。我尝试了其他人所说的(我认为你所描述的)并做了setup.Move.Element = Enums.PokemonType.Fighting | Enums.PokemonType.Flying;,但我认为它工作不正常。它对普通类型不是超级有效,但对毒类型不是很有效。但它在草/飞行类型上也超级有效@__@这很奇怪。
  • 更新:它现在对仙女类型非常有效。所以我不知道它在做什么了。它正在尽其所能@Servy
【解决方案2】:

要将多个值添加到枚举变量,您需要使用[Flags] 属性声明枚举。

所以你的枚举是:

[Flags]
public enum PokemonType
{
    Fighting = 1 << 0,
    Flying = 1 << 1,
    Normal = 1 << 2,
    Dragon = 1 << 3,
}

Define enumeration constants in powers of two,即1、2、4、8等。这意味着组合枚举常量中的各个标志不会重叠

然后使用Enums.PokemonType.Fighting | Enums.PokemonType.Flying 进行分配,以便以后跟踪分配给它的所有值。

【讨论】:

  • 您不需要使用Flags 属性。 很好,它会帮助一些枚举辅助方法更好地工作,但这并不是绝对必要的。所有必要是每个枚举值都是2的幂。
  • 我呃...不知道这是什么意思,但它不起作用。
  • @Foxwells 也许您需要回去学习一些基础知识,并对您不了解的内容进行一些研究,顺便说一句,这是非常直接的答案
  • @MethodMan 我几乎没有正式学习过 C#。我唯一的经历是由 4 个人编写的错误代码,他们之前唯一的经验是 Eclipse。抱歉,我不明白你所说的一切,无论事情是多么“基本”或“直截了当”。
  • 这就是互联网的用途,所以不管我只是说那里有大量免费资源,尤其是那些为初学者处理 C# 基础知识等的资源......
猜你喜欢
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多