能否在Record位置参数中使用其内部定义的类型?
问题解答
不行,没法在不把GenderEnum移出Character Record的前提下,让这段带位置参数的代码生效。
原因很简单:C#编译器处理Record的主构造函数签名(也就是括号里的string Name, GenderEnum Gender, int Age)时,Character类内部的成员还没被编译,这时候GenderEnum对编译器来说是个未定义的类型,必然会报错。
如果一定要把枚举放在Character的范围内,只能放弃主构造函数的位置参数写法,改成在类内部显式定义构造函数和属性,比如:
internal record class Character { public enum GenderEnum : byte { Male, Female, Other } public string Name { get; init; } public GenderEnum Gender { get; init; } public int Age { get; init; } public Character(string name, GenderEnum gender, int age) { Name = name; Gender = gender; Age = age; } }
这样枚举在类内部先定义,后面的构造函数就能正常引用它了,而且依然保持枚举是Character的内部成员。
内容的提问来源于stack exchange,提问作者Alexandre Bell
相关产品推荐
相关产品推荐

