2016-07-10 2 views
0

Ich erlebe ein wirklich seltsames Problem, das ich die folgende Sammlung habe:InvalidCastException während du die Schaltfläche als Parameter C# vorbei

public static readonly IEnumerable<Button> AuraButtons = 
     FindObjectsOfType<Button>().Where(button => button.tag == "Aura_Button"); 

und ich bin für eine Schaltfläche mit bestimmten Namen suchen und es auf eine Methode übergeben:

UpdateAuraIcon(Settings.AuraButtons.Single(button => button.name == 
     "Aura_Button_" + 1), panel); // 1 is just random number 

AuraButtons hat die angegebene Taste enthält aber ich die folgende Ausnahme erhalten: InvalidCastException: Cannot cast from source type to destination type. die Methode eine Schaltfläche als Parameter übernimmt, aber es wird es nicht akzeptieren? Das ist die Methode Unterschrift

private static void UpdateAuraIcon(Button auraButton, GameObject panel) 

Ich kann auch nur eine einzige Ganzzahl als Parameter übergeben:

private static void UpdateAuraIcon(int order) 
UpdateAuraIcon(1); 

immer noch die gleiche Ausnahme auslöst.

Boolean c__AnonStorey3: <> m__B (Button) + 0x0 C# Objekt System.Linq.Enumerable: Einzeln (IEnumerable 1, Func 2, Fallback) + 0x22 an: -1
Objekt System.Linq.Enumerable: Einzel (IEnumerable 1, Func 2) + 0xa unter: -1 Void Assets.Scripts.Manager: UpdateSelectedAuraPanel (AuraOrder) + 0x97 C# Void Assets.Scripts.Manager: SetCurrentAura (Gameobject) + 0x74 C# Void UnityEngine.Events.InvokableCall 1:Invoke (Object[])+0x3a at C:\buildslave\unity\build\Runtime\Export\UnityEvent.cs:184 C# Void UnityEngine.Events.CachedInvokableCall 1 : Aufrufen von (Object []) + 0x7 um C: \ Buildslave \ Unity \ Build \ Runtime \ Export \ UnityEvent.cs: 302 C# Void UnityEngine.Events.Invokabl eCallList: Invoke (Object []) + 0x53 unter C: \ Buildslave \ Unity \ Build \ Runtime \ Export \ UnityEvent.cs: 630 C# Void UnityEngine.Events.UnityEventBase: Invoke (Object []) + 0xd unter C: \ Buildslave \ Unity \ Build \ Runtime \ Export \ UnityEvent.cs: 765 C# Void UnityEngine.Events.UnityEvent: Invoke() + 0x7 unter C: \ Buildslave \ Unity \ Build \ Runtime \ Export \ UnityEvent_0.cs: 53 C# Void Assets.Scripts.Manager: CheckKeys (Dictionary 2, Predicate 1) + 0x2d C# Void Assets.Scripts.Manager: Update() + 0x89 C#

+0

Können Sie die Ausnahme Stacktrace und den entsprechenden Code buchen? Empfohlene Lektüre - http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist. –

+0

@EugenePodskal hinzugefügt die Stacktrace (habe ich?) – PreqlSusSpermaOhranitel

+0

Vielleicht liegt das Problem in 'FindObjectsOfType' und tritt nur auf, wenn die Sammlung wirklich ausgewertet wird; durch Verwendung von Single (was erfordert, dass die gesamte Sequenz durchlaufen wird, um sicherzustellen, dass es wirklich single ist) – Sehnsucht

Antwort

0

Versuchen unter Verwendung von "Objekt" als Typ für die Methode aufgerufen wird, dann gegossen Es gibt "Button" in der Methode ein.

private static void UpdateAuraIcon(object auraButton, GameObject panel) 
{ 
    Button btn = (Button)auraButton; 
... 
} 
+0

Nichts ändert sich – PreqlSusSpermaOhranitel