Gibt es eine Möglichkeit, alle Ressourcen in einer .resx
Datei in C# durchlaufen?Schleife durch alle Ressourcen in einer RESX-Datei
Antwort
Sie sollten immer den Ressourcenmanager verwenden und Dateien nicht direkt lesen, um sicherzustellen, dass die Globalisierung berücksichtigt wird.
using System.Collections;
using System.Globalization;
using System.Resources;
...
ResourceManager MyResourceClass = new ResourceManager(typeof(Resources /* Reference to your resources class -- may be named differently in your case */));
ResourceSet resourceSet = MyResourceClass.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
foreach (DictionaryEntry entry in resourceSet)
{
string resourceKey = entry.Key.ToString();
object resource = entry.Value;
}
Ich brauchte ein wenig um herauszufinden, dass Sie diese Zeile benötigen, um MyResourceClass zu deklarieren. 'ResourceManager MyResourceClass = neuer ResourceManager (" Resources.ResourceFileName ", System.Reflection.Assembly.Load (" App_GlobalResources "));' – JoeFletch
@JoeFletch: Er benötigt diese Zeile nicht. Der Code ruft die Ressourcendatei direkt auf. Beispiel: Ich habe eine Datei namens PageList.resx, dann rufe ich auf: ResourceSet resourceSet = PageList.ResourceManager.GetResourceSet (CultureInfo.CurrentUICulture, wahr, wahr); – Gabriel
@ Gabriel, danke für das Update! Ich werde zu meinem Code zurückgehen müssen, um das zu überprüfen. – JoeFletch
Verwenden ResXResourceReader Class
ResXResourceReader rsxr = new ResXResourceReader("your resource file path");
// Iterate through the resources and display the contents to the console.
foreach (DictionaryEntry d in rsxr)
{
Console.WriteLine(d.Key.ToString() + ":\t" + d.Value.ToString());
}
können Sie ResourceManager.GetResourceSet verwenden.
darüber gebloggt on my blog :) Kurzversion ist, die vollständigen Namen der Ressourcen zu finden (es sei denn Sie sie schon kennen):
var assembly = Assembly.GetExecutingAssembly();
foreach (var resourceName in assembly.GetManifestResourceNames())
System.Console.WriteLine(resourceName);
Um alle von ihnen für etwas zu verwenden:
Um Ressourcen in anderen Assemblys als die ausführende zu verwenden, erhalten Sie nur ein anderes Assembly-Objekt, indem Sie einige der anderen statischen Methoden der Klasse Assembly
verwenden. Hoffe, es hilft :)
Können Sie Ressourcen * nicht * in einem Ordner namens 'Ressource' aufzählen? Ich möchte alle Ressourcenbilder, die sich in meinem Projekt befinden, in einem Ordner namens "Bilder" auflisten. –
Ziemlich sicher, es ist egal, wo es sich befindet? Probier es aus? – Svish
Ich hatte Dateien in einem Ordner für die Eingabe von SQL-Dateien und das hat perfekt funktioniert. Ich fügte eine Umwandlung von einem Strom zu Schnur hinzu, also konnte ich die Akte lesen und hatte keine Probleme. – ErocM
Sobald Sie eine Ressource .RESX-Datei zu Ihrem Projekt hinzufügen, wird Visual Studio eine Designer.cs mit dem gleichen Namen erstellen, erstellen Sie eine Klasse für Sie mit allen Elementen der Ressource als statische Eigenschaften . Sie können alle Namen der Ressource sehen, wenn Sie den Punkt im Editor eingeben, nachdem Sie den Namen der Ressourcendatei eingegeben haben.
Alternativ können Sie Reflektionen verwenden, um diese Namen zu durchlaufen.
Diese Methode ist offensichtlich nur verwendbar, wenn sich die RESX-Datei im Bereich der aktuellen Baugruppe oder des aktuellen Projekts befindet. Andernfalls verwenden Sie die Methode "Impuls".
Der Vorteil dieser Methode ist, dass Sie die tatsächlichen Eigenschaften aufrufen, die für Sie bereitgestellt wurden, wobei Sie jede Lokalisierung berücksichtigen, wenn Sie dies wünschen. Es ist jedoch ziemlich redundant, da Sie normalerweise die direkte Methode zum Aufrufen der Eigenschaften Ihrer Ressourcen verwenden sollten.
Warum Reflektion verwenden, wenn ein ResourceSet verfügbar ist? –
Das würde ich mich auch fragen (siehe letzten Absatz). Ich wollte nur eine alternative Methode zeigen, aber noch wichtiger, wollte zeigen, dass die Klasse vollständig zugänglich gemacht wird und Sie keine Magie von Hand machen müssen (der erste Absatz). – Abel
// Create a ResXResourceReader for the file items.resx.
ResXResourceReader rsxr = new ResXResourceReader("items.resx");
// Create an IDictionaryEnumerator to iterate through the resources.
IDictionaryEnumerator id = rsxr.GetEnumerator();
// Iterate through the resources and display the contents to the console.
foreach (DictionaryEntry d in rsxr)
{
Console.WriteLine(d.Key.ToString() + ":\t" + d.Value.ToString());
}
//Close the reader.
rsxr.Close();
siehe Link: microsoft example
Beachten Sie, dass sich diese Klasse in der Assembly 'System.Windows.Forms' befindet und nicht automatisch hinzugefügt wird, wenn Sie eine MVC-App verwenden –
Mit LINQ to SQL:
XDocument
.Load(resxFileName)
.Descendants()
.Where(_ => _.Name == "data")
.Select(_ => $"{ _.Attributes().First(a => a.Name == "name").Value} - {_.Value}");
Wenn Sie LINQ möchten, verwenden resourceSet.OfType<DictionaryEntry>()
verwenden. Mit LINQ können Sie zum Beispiel auf Ressourcen zu wählen, basierend auf ihren Index (int) statt Schlüssel (string):
ResourceSet resourceSet = Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
foreach (var entry in resourceSet.OfType<DictionaryEntry>().Select((item, i) => new { Index = i, Key = item.Key, Value = item.Value }))
{
Console.WriteLine(@"[{0}] {1}", entry.Index, entry.Key);
}
- 1. Schleife durch alle Ressourcen in ResourceManager - C#
- 2. Schleife durch alle Teilansichten einer Android-Ansicht?
- 3. Schleife durch alle Diagramme in einer Arbeitsmappe mit VBA
- 4. Schleife durch alle Zellen in UICollectionview
- 5. Schleife durch alle Kontrollkästchen in Tabelle
- 6. while-Schleife innerhalb eines Triggers in einer Schleife durch alle Spalten der Tabelle in SQL
- 7. Schleife durch Datenrahmen plotten alle möglichen Fälle
- 8. PHP-Code in einer Schleife durch Datenbank
- 9. Zeige alle Drucken in einer Schleife Python
- 10. For-Schleife nicht durch alle Werte in Vektor
- 11. Schleife durch alle Kontrollkästchen, die in einem div-Tag sind
- 12. Schleife durch alle Elemente in zufälliger Reihenfolge einmal
- 13. Schleife durch Kontrollen
- 14. Schleife durch alle IDs, die mit XXX beginnen
- 15. Schleife durch Kontrollkästchen in Plocholder
- 16. eine ganze Reihe umwandeln, ohne Schleife durch alle Zellen
- 17. Schleife durch alle Elemente von "body" -Tags mit DOM
- 18. Finden Sie alle eingebetteten Ressourcen in einer anderen Baugruppe
- 19. Javascript Schleife durch alle HTML-Select <option>
- 20. Schleife durch Listenelemente
- 21. Alle nicht geschlossenen Ressourcen in Java schließen
- 22. Schleife durch Wörterbuch mit einer mathematischen Funktion
- 23. Schleife durch ein NSMutableDictionary
- 24. Schleife durch alle Nachkommen eines div - JS nur
- 25. Schleife durch JPanel
- 26. Schleife durch jeden Knoten
- 27. wie Schleife durch nfetchedresultcontroller
- 28. For-Schleife nicht durch alle Werte eines Wörterbuchs
- 29. Schleife durch Unterordner
- 30. Schleife durch Spalten in Mysql-Trigger
Können Sie erarbeiten, ob die RESX-Datei zu einem Projekt intern ist oder ob Sie (oder muss) eine separate RESX-Datei lesen oder RESX von einer anderen Baugruppe lesen? – Abel