比较枚举值

时间:2016-11-18 17:37:41

标签: enums ada

我想循环一个数组并检查当前数组索引是否是枚举值。数组和枚举定义如下:

type Option is (None, A, B, C, D);
type Votes is array(Option) of Natural;

Zero_Option_Distribution: constant Votes := (others => 0);
Votes_Distribution: Votes := Zero_Option_Distribution;

The Loop看起来像这样:

for I in Voting_System.Votes_Distribution'Range loop
   -- this is where I would like to check whether I is a representation of either of the enum values
end loop;

我已经尝试过一些我想到的东西,比如

if I = Voting_System.Option(None) then -- ...

if I'Val("None") then -- ...

还有一些版本,其中每个版本都没有用。

我真的没有任何想法来实现这一目标。

3 个答案:

答案 0 :(得分:2)

使用=比较枚举类型对象的值,就像任何其他类型的对象一样:

if I = None then
   ...
end if;

答案 1 :(得分:0)

-- this is where I would like to check whether I is a representation of either of the enum values

根据你问题中的这一行,我假设Party是一个整数子类型或什么?你应该可以使用这样的东西:

-- (Checks if I is 0)
if (Integer(I) = Voting_System.Option'Pos(Voting_System.Option.None)) then
-- ...

答案 2 :(得分:0)

如果 Party 是一个独特的类型,根据ARM953.5.1§7和ARM95 AnnexK§175,您可以尝试这样的事情:

MailMessage o = new MailMessage("from@gmail.com", "to@gmail.com", "Subject", "Body");
NetworkCredential netCred = new NetworkCredential("from@gmail.com", "password");
SmtpClient smtpobj = new SmtpClient("smtp.gmail.com", 587);
smtpobj.EnableSsl = true;
smtpobj.Credentials = netCred;
smtpobj.Send(o);

在所有情况下都需要其他人,因为我们开始使用 Universal_Integer 类型。