复用已定义变量创建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
相关产品推荐
相关产品推荐

