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

C#中如何通过List修改静态字符串变量?

问题描述

我定义了一些静态字符串:

static string   Robocopy_Mirror = "[Robocopy_Mirror]"; 
static string   Robocopy_Copy = "[Robocopy_Copy]";
static string   Network_Path_1 = "[Network_Path_1]";    // \\NAS\Sync\
static string   Lokal_Path_1 = "[Lokal_Path_1]";      // X:\Sync\

为精简代码,我将这些变量放入List并尝试通过循环修改值:

List<string> variableListe = new List<string>()  
{   
    Robocopy_Mirror , Robocopy_Copy , Network_Path_1, Lokal_Path_1, 
    File_Network_Sync_1, File_Lokal_Sync_1, File_Network_Sync_2, File_Lokal_Sync_2
};

但静态变量未被修改,测试代码如下:

for (int i = 0; i < variableListe.Count-1; i++)
{
    variableListe[i] = AppConfig.ElementAt(configPathPosition);
}
Console.WriteLine(Robocopy_Mirror); 

// prints  "[Robocopy_Mirror]" instead of like C:\robocopy

请问有没有快速修改这些静态变量的方法?

原因及解决方法

为什么List无法修改原静态变量

string是不可变引用类型,赋值时会创建副本存入List,而非存储原变量的引用。修改List中的元素只会改变副本值,原静态变量不会同步更新。

快速修改的方法

方法1:用委托列表存储赋值逻辑

把每个静态变量的赋值操作封装成委托,循环执行委托即可直接修改原变量:

// 定义委托列表,每个元素对应一个静态变量的赋值操作
List<Action<string>> setters = new List<Action<string>>()
{
    val => Robocopy_Mirror = val,
    val => Robocopy_Copy = val,
    val => Network_Path_1 = val,
    val => Lokal_Path_1 = val,
    val => File_Network_Sync_1 = val,
    val => File_Lokal_Sync_1 = val,
    val => File_Network_Sync_2 = val,
    val => File_Lokal_Sync_2 = val
};

// 循环执行委托,修改原静态变量
for (int i = 0; i < setters.Count; i++)
{
    setters[i](AppConfig.ElementAt(configPathPosition + i));
}

方法2:反射批量修改

如果静态变量数量较多,可通过反射遍历并修改:

var type = typeof(YourClassName); // 替换为包含静态变量的类名
var fields = type.GetFields(BindingFlags.Static | BindingFlags.Public);
// 注意要保证配置值顺序与变量顺序一致
for (int i = 0; i < fields.Length && i < AppConfig.Count(); i++)
{
    fields[i].SetValue(null, AppConfig.ElementAt(configPathPosition + i));
}

提示:反射存在一定性能开销,且变量名或类名变更易引发错误,适合变量数量多且结构稳定的场景。

方法3:封装为静态类属性(推荐)

把配置项封装成静态类的属性,既便于维护,也能批量修改:

public static class AppSettings
{
    public static string Robocopy_Mirror { get; set; } = "[Robocopy_Mirror]";
    public static string Robocopy_Copy { get; set; } = "[Robocopy_Copy]";
    public static string Network_Path_1 { get; set; } = "[Network_Path_1]";
    // 添加其他配置项...
}

// 批量修改属性
var properties = typeof(AppSettings).GetProperties(BindingFlags.Static | BindingFlags.Public);
for (int i = 0; i < properties.Length; i++)
{
    properties[i].SetValue(null, AppConfig.ElementAt(configPathPosition + i));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:13:26