类型名称不存在错误:如何创建List的List?(附C#代码)
解决“类型名称不存在于类型中”的错误
嘿,我一眼就看出问题出在哪了——你把属性当成类型来用啦!让我给你拆解清楚:
错误原因
你的SomeClassName.SaveFields是一个属性,它的返回类型是List<char>,但它本身不是一个类型。而你在创建列表时写了List<SomeClassName.SaveFields>,这相当于告诉编译器“我要创建一个包含SomeClassName里名为SaveFields的类型的列表”,但实际上SaveFields根本不是嵌套类型,只是个属性,所以编译器才会抛出“类型名称不存在于类型中”的错误。
你真正想要的是创建一个**List的List**,也就是List<List<char>>,因为SaveFields的类型就是List<char>。
修正后的代码
类定义部分(可保持不变)
namespace TicTacToe { class SomeClassName { static List<char> saveFields = new List<char>(); public static List<char> SaveFields { get { return saveFields; } set { saveFields = value; } } } }
方法部分(关键修正)
public void someMethod() { // 直接用List<char>作为泛型参数,创建List的List List<List<char>> someListName = new List<List<char>>(); // 如果你想和SaveFields的类型强关联,也可以这样写(效果完全一致) List<typeof(SomeClassName.SaveFields).GetGenericArguments()[0]> someListName = new List<typeof(SomeClassName.SaveFields).GetGenericArguments()[0]>(); // 不过更推荐第一种写法,可读性更强 }
额外简化建议
如果觉得List<List<char>>写起来繁琐,也可以用C#的类型别名简化:
// 在命名空间顶部添加别名 using SaveFieldList = System.Collections.Generic.List<char>; // 然后方法里就可以这样写 public void someMethod() { List<SaveFieldList> someListName = new List<SaveFieldList>(); }
这样代码会更清晰,也能避免重复书写List<char>。
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

