Pokud potřebujete načítat resources dynamicky, určitě by vám přišla vhod možnost ovlivnit resource ID generované při jeho vytvoření. Toho můžete docílit tímto snadným trikem (ne tak snadným na nalezení):
Za název resource dejte středník a číslo, které potřebujete (záporná lze rovněž). Resource designer sice bude hrozit červenými vykřičníčky, nicméně jde pouze o varování a program lze pez problémů zkompilovat a spustit s kýženým výsledkem. Např:
Tato vymoženost však není zdokumentována (zřejmě kvůli vykřičníčkům) a může se ještě změnit.
Následující trik už bohužel ve verzi 3.0 nefunguje.
Vlastní resource enumeration
Další tip se týká enumů. Pokud několik resource názvů začnete stejně a oddělíte tečkou od zbytku, vygeneruje se vám speciální enum, na příklad:
MyFruitEnum.Apple
MyFruitEnum.Banana
MyFruitEnum.Orange
vygeneruje:
[System.SerializableAttribute()]
internal enum MyFruitEnum : short
{
Banana = 16540,
Apple = 27001,
Orange = 31269,
}
internal class Resources
{
...
internal static string GetString(MyFruitEnum id)
{
return ((string)(Microsoft.SPOT.ResourceUtility.GetObject(ResourceManager, id)));
}
}
Tím pádem můžete resources získávat velmi snadno:
Debug.Print(Resources.GetString(MyFruitEnum.Apple));
Ani v tomto případě ale z vás nebude designer příliš nadšený. Dokonce můžete předchozí trik kombinovat s tímto, totiž vlastní enum s vašemi číselnými hodnotami (jako MyFruitEnum.Banana;4 atd.).
Nestačí?
Dobře, co byste tak řekli, že se stane, když budeme přidávat další tečky? Odpověď je: ne úplně nic, ale pořád nic použitelného. Ve skutečnosti můžete pomocí druhé tečky určit namespace (např. MyNamespace.MyFruitEnum.Apple atd.):
namespace MyNamespace
{
[System.SerializableAttribute()]
internal enum MyFruitEnum : short
{
Apple = -4859,
Orange = -3030,
Banana = 21283,
}
}
Proč nic užitečného? Podívejme se na příslušnou metodu:
namespace MFConsoleApplication1
{
...
internal class Resources
{
...
internal static string GetString(MyFruitEnum id)
{
return ((string)(Microsoft.SPOT.ResourceUtility.GetObject(ResourceManager, id)));
}
}
}
Výsledkem je kompilační chyba, ježto MyFruitEnum nespadá do stejné namespace. Domnívám se, že to je bug v generování kódu.
Tři a více teček ponechávám čtenáři jako snadné cvičení.