2017-11-11 3 views
0

필자는 필자가 필자가 배열에서 특정 값을 가져 오려는 API를 필사적으로 적용하려고 노력하고 있으며 그렇게 할 수없는 것처럼 보입니다.C# 특정 값을 배열 밖으로 가져 오기

특히, 나는 사용자 정의 필드 이름과 값을 가져 오려고하는데, 여기서 이름은 Controller이고 값은 사용자가 값 (문자열 값)을 부여한 값입니다.

이렇게하려면 IGame 인터페이스를 사용해야합니다.이 인터페이스에는 여러 가지 속성과 메서드가 있습니다. 모든 속성은 속성 이름으로 진행되는 게임에서 사용됩니다. 예 : game.title 또는 game.Platform.

따라서 this.Controller.Text = game.Title;을 실행하면 UI에 게임 타이틀이 출력됩니다. 여태까지는 그런대로 잘됐다.

내 문제는 사용자 정의 필드 거짓말 whering 메서드를 사용하면 온다. ICustomField[] GetAllCustomFields() 구문을 가지고 GetAllCustomFields 사용해야합니다. 반환 값은 GameId, Name, Value의 속성을 갖는 public interface ICustomField 인 구문이 차례로있는 ICustomField[]입니다.

API는 실제 사용에 대한 추가 정보를 제공하지 않기 때문에 알아낼 수는 있지만 사용하지 않을 것입니다.

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> 

은 누군가가 나를 이렇게 실제로 작동 foreach 구조 조정을 도와 드릴까요 : 내가 지금까지 무엇을 여기

?

+1

for 루프에서 foreach (game.GetAllCustomFields())의 foreach (ICustomField 필드)를 원하는 것처럼 들리면 'this.Controller.Text = ""field.Name + "은"+ field.Value ; ' – mnistic

+0

나는 내가 가까웠다는 것을 알았다! 고맙습니다! – Sweepster

+0

한 가지만, 여러 가지 사용자 정의 필드가있을 수 있으므로 어떻게 이름 컨트롤러가있는 필드 만 표시 할 수 있습니까? 사용자가 서로 다른 필드 이름을 가지고 있다면, 나는 모든 것을 출력하고 싶지 않습니다. – Sweepster

답변

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

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

아니면 그냥 하나의 컨트롤러 필드 인 경우가 발견 된 경우

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

?.Value 필드의 값을 반환합니다. 그렇지 않은 경우 해당 물음표로 인해 NullReferenceException이 발생하므로 .Value에 액세스하지 못하게됩니다. ?? "No controller here"을 추가하면 컨트롤러 필드가없는 경우 반환되는 폴백을 제공합니다. 그 작전가 (?.)는 아직 모른다면 null coalescing operator이라고합니다.