C # struct inicializace s chybou kompilace, ale pracuje správně

hlasů
-1

Uvnitř XNA struct Vector2 jsou dvě veřejné proměnné X a Y. Mám následující kód:

Vector2 v; if (b) vX = 1; jiný VY = 2;

// použití v

Kompilátor dává „Použití nepřidělené lokální proměnné‚v‘“ Ale to běží správně nicméně.

Existuje více správný způsob, jak to udělat?

Položena 30/07/2009 v 08:19
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
4

C # vyžaduje přiřadit hodnotu vašich lokálních proměnných před jejich použitím.

Vector2 v = new Vector2();
Odpovězeno 30/07/2009 v 08:21
zdroj uživatelem

hlasů
2

Funguje to proto, že struct je automaticky inicializuje. Všichni její členové jsou nastaveny na výchozí hodnotu jejich typ je. Ale pokud budete používat nepřiřazené proměnné jako je tento, je to obvykle proto, že jste zapomněli na to, než přiřadit. Myslím, že kompilátor nedělá rozdíl mezi structs a tříd zde.

Odpovězeno 30/07/2009 v 08:49
zdroj uživatelem

hlasů
0

IMHO, to je velmi špatný nápad. Struktury v C # jsou hodnotové typy. C # ukládá řadu omezení, aby zajistily, že všechna pole struct inicializaci:

  • Výchozí constructors nejsou povoleny.
  • Konstruktéři musí inicializovat všechna pole uvnitř struct.

Pokud nechcete instanci struct prostřednictvím konstruktoru, pak všichni členové jsou nastaveny na výsledek volání default()na typu člena. To umožňuje structs které mají být použity v polích. To také umožňuje, co děláte, ale je také důvodem pro varování.

V ideálním případě byste měli definovat konstruktor a inicializovat struct s konstruktoru.

Edit: K objasnění omezení výchozí (bez parametrů) konstruktor, můžete není explicitně definovat jedno, protože kompilátor poskytuje jeden, který používá k inicializuje všechny členy.

Odpovězeno 30/07/2009 v 09:19
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more