C # Нецелые перечисления и приведение - PullRequest
0 голосов
/ 25 января 2012

C # позволяет вам присваивать значения вашим элементам перечисления, таким как

public enum Animals
{
    Dog = 0, Cat = 1,
}

И вы также можете выполнять приведение типов и из них.

public void demo()
{
    int dog = (int)Animals.Dog;
    Animals cat = (Animals)(dog++);
}

Но c # также позволяет вам делатьтакие вещи, как это

public enum Animals
{
    Dog = Vector2.One, Cat = Vector2.Zero,
}

Однако вы не можете вернуть и вытащить Vector2.например,

Vector2 dog = (Vector2)Animals.Dog; //this fails

Эта проблема разрешима?* Примечание Vector2 является объектом класса, а Vector2.One и Vector2.Zero являются статическими объявлениями таких объектов.Что означает, что Собака назначена на ссылку памяти.

1 Ответ

2 голосов
/ 25 января 2012

Единственный способ, которым C # позволит вам сделать

public enum Animals
{
    Dog = Vector2.One,
    Cat = Vector2.Zero
}

Если существует неявное приведение от Vector2 к целочисленному типу. В противном случае вы получите ошибку компиляции. Вот почему вы не можете выполнить приведение к Vector2 - нет никакого преобразования с int обратно на Vector2. Dog и Cat являются целочисленными значениями, а значения берутся из неявного приведения от Vector2.One и Vector2.Zero до int соответственно.

Вы можете определить свой собственный явный приведение, чтобы заставить его работать, но я предполагаю, что вы не сможете получить всю информацию, которую вы хотите таким образом.

...