2017-11-11 5 views
0

Ich versuche verzweifelt, eine API anzupassen, von der ich einen bestimmten Wert aus einem Array abrufen möchte, und ich kann nicht scheinen, so zu tun.C# Abrufen eines bestimmten Werts aus einem Array

Insbesondere versuche ich, einen benutzerdefinierten Feldnamen und Wert aus der API zu holen, wo der Name Controller ist und der Wert ist, was auch immer der Benutzer gab es einen Wert von (es ist ein String-Wert).

Um dies zu erreichen, muss ich eine sogenannte IGame-Schnittstelle verwenden, die mehrere Eigenschaften und Methoden enthält. Alle Eigenschaften werden mit Spiel verwendet, das mit dem Namen der Eigenschaft fortgesetzt wird. Zum Beispiel game.title oder game.Platform.

Also, tun this.Controller.Text = game.Title; gibt den Spieltitel auf der Benutzeroberfläche. So weit, ist es gut.

Mein Problem kommt, wenn Sie die Methoden verwenden, die benutzerdefinierten Felder lügen. Ich muss GetAllCustomFields verwenden, die die Syntax von ICustomField[] GetAllCustomFields() hat. Der Rückgabewert ist ICustomField[], dessen Syntax wiederum public interface ICustomField mit den Eigenschaften GameId, Name, Value ist.

Leider gibt mir die API keine weiteren Informationen über die tatsächliche Verwendung, so dass ich es versuchen muss, um es herauszufinden, aber ohne Erfolg.

Hier ist, was ich bisher:

public void OnSelectionChanged(FilterType filterType, string filterValue, IPlatform platform, IPlatformCategory category, IPlaylist playlist, IGame game) 
    { 
     if (game == null) 
     { 
      this.Controller.Text = "HellO!"; 
     } 
     else 
     { 
      foreach (string field in game.GetAllCustomFields(ICustomField[Name])) 
      { 
       this.Controller.Text = "The " + Name + " is " + Value; 
      } 
     } 
    } 

XAML

<Grid> 
    <TextBox x:Name="Controller" /> 
</Grid> 

Kann mir jemand helfen, die foreach restrukturieren so tatsächlich funktioniert es?

+1

Es klingt wie Sie wollen 'foreach (ICustomField Feld in game.GetAllCustomFields())' in Ihrer for-Schleife, und dann 'this.Controller.Text =" Das "+ Feld.Name +" ist "+ field.Value ; ' – mnistic

+0

Ich wusste, dass ich in der Nähe war! Danke! – Sweepster

+0

Eine Sache, obwohl es mehrere verschiedene benutzerdefinierte Felder geben kann, wie kann ich sicherstellen, dass ich nur das Feld mit dem Namen Controller anzeigen? Wenn Benutzer mehrere verschiedene Feldnamen haben, möchte ich nicht alles ausgeben. – Sweepster

Antwort

1
var controllerFields = game.GetAllCustomFields().Where(f => f.Name == "Controller"); 

foreach (var field in controllerFields) 
{ 
    this.Controller.Text = "The " + field.Name + " is " + field.Value; 
} 

Oder wenn es nur ein Controller-Feld:

Controller.Text = game.GetAllCustomFields() 
         .SingleOrDefault(f => f.Name == "Controller") 
         ?.Value ?? "No controller here"; 

?.Value den Wert des Feldes zurück, wenn es gefunden wurde. Wenn nicht, verhindert dieses Fragezeichen den Zugriff auf , da dies zu einer NullReferenceException führen würde. Wenn Sie ?? "No controller here" hinzufügen, geben Sie einen Fallback zurück, der zurückgegeben wird, wenn kein Controller-Feld gefunden wurde. Dieser Betreiber (?.) wird null coalescing operator genannt, wenn Sie es noch nicht wissen.

Verwandte Themen