using System;
using UnityEngine;
public class ObjectInitializer : MonoBehaviour
{
public string[] names = { "Hello", "World" };
void Start()
{
Debug.Log("Name: " + GetName(new Settings { mySetting = 1 }));
Debug.Log("Name: " + GetName(new Settings { mySetting = 0 }));
}
private string GetName(Settings sett)
{
if (sett.mySetting == Settings.INVALID_SETTING)
throw new Exception("Error: Setting not set");
return names[sett.mySetting];
}
}
public class Settings
{
public const int INVALID_SETTING = -1;
public int mySetting = INVALID_SETTING;
}
A segunda chamada GetName lança uma exceção porque mySetting = 0 é removido durante a compilação. A razão para essa remoção é provavelmente porque 0 é o valor padrão para int e, portanto, presume-se que ele pode ser ignorado. Este seria o mesmo caso se mySetting fosse um booleano que estava sendo padronizado como verdadeiro, mas o inicializador de objetos estava tentando defini-lo como falso, já que false é o valor padrão para booleanos.
Este não é o caso do Mono ou .NET “normal”.
Isso ainda é verdade no Unity3D 4.3.4f1