You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何使用字符串变量内容访问Resources.resx内部资源?

C# 运行时通过动态字符串访问Resources.resx资源的方法

不需要提前将所有资源存入字典,.NET 提供了原生的直接通过动态资源名访问资源的方式,直接使用Resources类自带的ResourceManager即可实现。

推荐方案:使用内置ResourceManager

Visual Studio自动生成的Properties.Resources类默认公开了ResourceManager静态属性,封装了所有资源的访问逻辑,直接调用对应方法即可按运行时传入的字符串查找资源:

  • 查找字符串资源:调用GetString()方法
  • 查找图片、音频、文件等其他类型资源:调用GetObject()方法后强转为对应类型

代码示例

读取字符串资源

// 运行时获取的资源名字符串,可来自配置、用户输入等任意动态来源
string dynamicResourceName = "WelcomeTipText";
// 读取对应资源
string resourceContent = Properties.Resources.ResourceManager.GetString(dynamicResourceName);

// 可选:指定读取对应语言的本地化资源
// string resourceContent = Properties.Resources.ResourceManager.GetString(dynamicResourceName, CultureInfo.GetCultureInfo("zh-CN"));

读取非字符串资源(以图片为例)

string iconResourceName = "MainAppIcon";
Bitmap appIcon = (Bitmap)Properties.Resources.ResourceManager.GetObject(iconResourceName);

注意事项

  • 资源名区分大小写,传入的字符串要和Resources.resx中定义的资源名完全一致
  • 未找到匹配资源时方法返回null,建议提前做空值判断
  • 不传文化参数时,默认使用当前线程的UI文化读取对应本地化资源

可选方案:预生成资源字典

如果你的业务需要频繁查询大量资源、或者需要枚举所有资源,可以一次性把所有资源加载到字典里缓存,避免重复查找的开销:

using System.Collections.Generic;
using System.Globalization;

// 初始化时一次性缓存所有资源
Dictionary<string, object> resourceCache = new Dictionary<string, object>();
var resourceSet = Properties.Resources.ResourceManager.GetResourceSet(CultureInfo.CurrentUICulture, true, true);
foreach (DictionaryEntry entry in resourceSet)
{
    resourceCache.Add(entry.Key.ToString(), entry.Value);
}

// 运行时快速查询
string dynamicResourceName = "xxx";
if (resourceCache.TryGetValue(dynamicResourceName, out var resourceValue))
{
    // 处理对应资源
}

普通单条查询场景直接用ResourceManager原生方法即可,无需额外缓存,只有高频批量查询场景才需要预生成字典优化性能。

内容的提问来源于stack exchange,提问作者Adi Pauker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:06:03