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

复用已定义变量创建List?CS0128错误解决及代码优化

解决C#变量重定义(CS0128)并实现List存储需求的方案

兄弟,你遇到的这个CS0128错误本质很简单:同一个代码作用域里,不能重复定义同名变量。你一开始先声明了string类型的tablesInDatabases,紧接着又想用这个名字创建List<string>类型的变量,这在C#里是严格禁止的,编译器直接就报错了。

结合你后来改写的代码,我猜你是想把输入的表名和对应的数据库名关联起来存储,下面给你两个实用的解决方案:

方案1:修改变量名,避免冲突

如果想保留最初的思路,只要把其中一个变量的名字改掉就行,比如把字符串类型的变量换个名称:

Console.Write("Choose name for new table: ");
string tableName = Console.ReadLine();
// 把拼接后的字符串变量改名为fullTableName,避免和List变量重名
string fullTableName = $"{dataBases[chooseDatabase]}{tableName}";
// 现在可以正常定义List变量了
List<string> tablesInDatabases = new List<string>();
tablesInDatabases.Add(fullTableName);

方案2:提前初始化List,直接追加数据(更贴合你改写后的逻辑)

看你后来的代码,应该是想分别存储表名和对应的数据库名?那其实可以提前在作用域开头(比如方法的最开始)初始化好两个List,之后直接往里面加数据就行,完全不用重复定义变量:

// 先在方法开头初始化好需要的List(只做一次)
List<string> tables = new List<string>();
List<string> tableBelongTo = new List<string>();

// 然后在输入逻辑里直接添加数据
Console.Write("Choose name for new table: ");
string table = Console.ReadLine();
// 这里不用new string(),直接取数据库名就行,new string是用来创建重复字符的字符串的
string inThisDatabase = dataBases[chooseDatabase];
tables.Add(table);
tableBelongTo.Add(inThisDatabase);

额外小建议

如果想把表名和数据库名作为一组关联数据存储,其实用两个分开的List不是最清晰的做法,你可以试试自定义一个简单的类,或者用元组:

// 自定义类的方式
public class TableDatabasePair
{
    public string TableName { get; set; }
    public string DatabaseName { get; set; }
}

// 使用的时候
List<TableDatabasePair> tablePairs = new List<TableDatabasePair>();
tablePairs.Add(new TableDatabasePair 
{ 
    TableName = table, 
    DatabaseName = inThisDatabase 
});

这样后续要取数据的时候,直接通过对象的属性就能拿到对应的表名和数据库名,比维护两个List要方便得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:33