Xamarin.Android でファイル名からリソースを取ってきたいとき

共通クラスのプロパティにリソースのファイル名を持たせて各OS間で統合したいときの Android 側のハンドリングです.

(そもそもこの設計がベストプラクティスではないと思われます…)

public class Item
{
    public String FileName { get; set; }
}

上記のようにリソース(drawable, string, color など)のファイル名(またはリソース名)をプロパティとして持たせます.

class ResourceConverter
{
    public static int GetDrawableID(Context context, String fileName)
    {
        return context.Resources.GetIdentifier(fileName, "drawable", context.PackageName);
    }

    public static int GetStringID(Context context, String stringName)
    {
        return context.Resources.GetIdentifier(stringName, "string", context.PackageName);
    }

    public static int GetColorID(Context context, String colorName)
    {
        return context.Resources.GetIdentifier(colorName, "color", context.PackageName);
    }
}

Android 側ではファイル名(リソース名)からリソース ID を取得します.

ImageView.SetImageResource(
    ResourceConverter.GetDrawableID(this.Context, Item.FileName));

使用例です.

おそらくとてもナイーブな手法だと思われます…
staticなリソースを各 OS 間でどう共通化するのか、ベストプラクティスを知っている方はぜひ教えてくださいorz