我有一个图书馆。
namespace Defintnions
{
public class skywave
{
public enum partnum : byte { assembled, configured };
public readonly string partnum_assembled = "1234B";
}
}
我正在同一解决方案中测试其他项目。
using Defintnions;
namespace ConsoleApplication1
{
class MainEntry
{
static void Main(string[] args)
{
string test3 = skywave.partnum.Assembled.ToString(); //assembled
string zxcv = skywave.partnumAssembled; //doesnt compile
skywave obj = new skywave();
string asdf = obj.partnumAssembled; //1234B
Console.WriteLine(test3);
Console.WriteLine(asdf);
Console.ReadKey(true);
}
}
}
我很困惑为什么test3
不需要在本地创建enum
对象。
我认为它非常干净,这让我想知道是否有办法做类似的事情,而是让enum
的输出成为字母数字。
理想情况下,我希望我的库能够执行以下操作,但不需要先创建对象的麻烦。
string zxcv = skywave.partnum.assembled; //1234B
答案 0 :(得分:1)
枚举是C#中的类型。在您的代码中,skywave
是一个包含名为partwave
的枚举的类。如果您希望能够在不参考partwave
的情况下引用skywave
,则需要在课堂外定义它:
public enum partnum : byte { assembled, configured };
public class skywave
{
public readonly string partnum_assembled = "1234B";
}
如果您希望能够在不实例化partnum_assembled
的情况下引用skywave
,则需要将其定义为static
或const
public class skywave
{
public static readonly string partnum_assembled = "1234B";
}
或
public class skywave
{
public const string partnum_assembled = "1234B";
}
答案 1 :(得分:1)
嵌套类型(在这种情况下是枚举,虽然它适用于任何其他种类的嵌套类型)不能通过包含对象的实例访问,而是通过包含对象本身。
skywave
的特定实例不包含 partnum
类型。整个skywave
类包含类型,因此您可以通过该类型访问enum
。
没有从enum
到string
的隐式转换,也没有任何方法可以创建一个。您需要创建自己的自定义类型,模拟枚举模式,以隐式转换为string
。
答案 2 :(得分:0)
https://stackoverflow.com/a/29251412/7474080
在前面的例子中找到了答案,但没有找到它的词汇。