C# 在C中的泛型方法中使用枚举#
我今天刚开始学习C#,我正在尝试制作一种通用方法,可以对不同的枚举进行操作。我在纸上的另一个问题中找到了一些代码,但编译器一直在抱怨。我想知道是否有人能帮我一把。以下是我到目前为止的情况:C# 在C中的泛型方法中使用枚举#,c#,generics,methods,enums,C#,Generics,Methods,Enums,我今天刚开始学习C#,我正在尝试制作一种通用方法,可以对不同的枚举进行操作。我在纸上的另一个问题中找到了一些代码,但编译器一直在抱怨。我想知道是否有人能帮我一把。以下是我到目前为止的情况: static void ReadMenuInput<T>(out T menuInput) { while (true) { if (enum<T>.TryParse(Console.ReadLine(), out
static void ReadMenuInput<T>(out T menuInput)
{
while (true)
{
if (enum<T>.TryParse(Console.ReadLine(), out menuInput) && menuInput < sizeof(T))
{
break;
}
Console.WriteLine("Please enter a valid input.");
}
}
static void ReadMenuInput(out T menuInput)
{
while(true)
{
if(enum.TryParse(Console.ReadLine(),out menuInput)&&menuInput
谢谢你的帮助 该特定代码片段存在两个不同的问题,其中一些问题比其他问题更容易处理。其中一些只是表明你缺乏经验:
和enum
不可交换;一个是类名,一个是C#关键字。在某些情况下(例如,enum
和string
),关键字只是类型的别名,但string
不是类型名,它用于定义类型名。要调用类方法,需要使用enum
Enum
- 您试图用错误的语法调用generic
方法;它应该是TryParse
Enum.TryParse
- 枚举数和整数不是同一类型,您不能只对它们进行比较。然而,它们可以通过显式类型转换相互转换。由于
返回一个sizeof
,因此需要这样的类型转换(但请参见下文)int
并没有达到您的期望,我认为;它返回枚举的大小(以字节为单位),通常为4。您可能需要该方法,该方法让您知道是否在枚举类型中定义了特定的整数值sizeof(enum)
- 编译器将告诉您,在此上下文中只能使用不可为null的泛型类型。定义这一点的方法是在泛型类型上使用。请注意,尽管名称不同,但这并不强制您的类型成为结构;它只是强制它成为值类型
- 您无法在泛型类型上指定必须是枚举类型的约束;如果将其他值类型传递给该方法,它将在运行时引发异常。这件事由你来妥善处理
static void ReadMenuInput<T>(out T menuInput) where T : struct
{
while (true)
{
if (Enum.TryParse<T>(Console.ReadLine(), out menuInput)
&& Enum.IsDefined(typeof(T), menuInput))
{
break;
}
Console.WriteLine("Please enter a valid input.");
}
}
static void ReadMenuInput(out T menuInput),其中T:struct
{
while(true)
{
if(Enum.TryParse(Console.ReadLine(),out menuInput)
&&已定义枚举(类型(T),菜单输入))
{
打破
}
Console.WriteLine(“请输入有效的输入。”);
}
}
C语言的第一天,您正在学习泛型。请将编译器的抱怨添加到您的问题中。在我使用PHP语言编写C语言的第一天,我在Java语言中仅用了几周时间就做到了这一点,非常感谢。这很管用。我想我需要几周的时间才能掌握所有错误消息的窍门。一开始它们很神秘还有一件事。。。在哪里可以找到有关“Where T:struct”构造的更多信息。我以前从未见过这种情况。它叫什么?其中T:以在泛型中添加约束而闻名。我在我的答案中添加了一个到约束文档的链接。