2017-10-23 1 views
4

SkiaSharp.SKColors 구조체에는 미리 정의 된 색상 집합이 있습니다. 그들은 공개적으로 SKColor 유형의 정적 필드로 노출됩니다.미리 정의 된 색상을 구조체의 색상 목록으로 변환하는 방법은 무엇입니까?

해당 필드를 추출하여 SKColor의 목록을 만들고 싶습니다. 내 시도는 다음과 같지만 코드에 표시된 시점에서해야 할 일을 모릅니다. 여기

using SkiaSharp; 
using System; 
using System.Collections.Generic; 
using System.Reflection; 

namespace Example 
{ 
    class Program 
    { 
     static void Main() 
     { 
      Type type = typeof(SKColors); 
      FieldInfo[] fis = type.GetFields(BindingFlags.Static | BindingFlags.Public); 
      List<SKColor> colors = new List<SKColor>(); 

      foreach(FieldInfo fi in fis) 
      { 
       //colors.Add(fi.WhatIsThis); // The point in question 
      } 
     } 
    } 
} 

SKColors의 발췌 한 것입니다 : FieldInfo를 사용

// 
// Just contains various utility colors 
// 
// Author: 
// Miguel de Icaza 
// 
// Copyright 2016 Xamarin Inc 
// 
using System; 
namespace SkiaSharp 
{ 
    public struct SKColors 
    { 
     public static SKColor Empty => new SKColor (0x00000000); 
     public static SKColor AliceBlue = new SKColor (0xFFF0F8FF); 
     public static SKColor AntiqueWhite = new SKColor (0xFFFAEBD7); 
     public static SKColor Aqua = new SKColor (0xFF00FFFF); 
     public static SKColor Aquamarine = new SKColor (0xFF7FFFD4); 
     public static SKColor Azure = new SKColor (0xFFF0FFFF); 
     public static SKColor Beige = new SKColor (0xFFF5F5DC); 
     public static SKColor Bisque = new SKColor (0xFFFFE4C4); 
     public static SKColor Black = new SKColor (0xFF000000); 
     public static SKColor BlanchedAlmond = new SKColor (0xFFFFEBCD); 
     public static SKColor Blue = new SKColor (0xFF0000FF); 
     public static SKColor BlueViolet = new SKColor (0xFF8A2BE2); 
     public static SKColor Brown = new SKColor (0xFFA52A2A); 
     public static SKColor BurlyWood = new SKColor (0xFFDEB887); 

     // trimmed for the sake of brevity 
    } 
} 
+2

'(SKColor) fi.GetValue (널)' – NotADeveloper

답변

6

, 당신은뿐만 아니라 실제 값으로 필드에 대한 참조를 유지하고 있습니다.

대신을 시도해보십시오

var colors = typeof(SKColors) 
       .GetFields(BindingFlags.Static | BindingFlags.Public) 
       .Select(fld => (SKColor)fld.GetValue(null)) 
       .ToList(); 

참조 MSDN

관련 문제