Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型中不接受Enum.TryParse,仅限于Enum_C#_Generics_Enums - Fatal编程技术网

C# 泛型中不接受Enum.TryParse,仅限于Enum

C# 泛型中不接受Enum.TryParse,仅限于Enum,c#,generics,enums,C#,Generics,Enums,我想我可能在做一些愚蠢的事情,但我正在尝试编写一个通用函数,它接受一个字符串并将其转换为一个枚举,然后执行一些为简洁起见而跳过的其他操作。 问题是,它抱怨Enum.TryParse需要一个不可为null的类型,它抱怨t可为null;看似System.Enum可为null,但实际的Enum不可为null。 是我做错了什么,还是有办法解决这个问题 private T GetEnumFilter<T>(string strValue) where T : Enum { retur

我想我可能在做一些愚蠢的事情,但我正在尝试编写一个通用函数,它接受一个字符串并将其转换为一个枚举,然后执行一些为简洁起见而跳过的其他操作。 问题是,它抱怨Enum.TryParse需要一个不可为null的类型,它抱怨t可为null;看似System.Enum可为null,但实际的Enum不可为null。 是我做错了什么,还是有办法解决这个问题

private T GetEnumFilter<T>(string strValue) where T : Enum
{
     return Enum.TryParse(strValue, out T value) ? value : throw new Exception("Invalid value");
}
我已经看到了这个答案和样本,但看不出我做错了什么

看似System.Enum可为null,但实际的Enum不可为null

是的,就像System.ValueType是引用类型一样,但值类型本身不是

您只需添加一个结构约束:

私有T GetEnumFilterstring值,其中T:struct,Enum 这将编译,例如:

私有静态T GetEnumFilterstring值,其中T:struct,Enum=> Enum.TryParsevalue,out T结果?结果:抛出新的ExceptionInvalid值; 看似System.Enum可为null,但实际的Enum不可为null

是的,就像System.ValueType是引用类型一样,但值类型本身不是

您只需添加一个结构约束:

私有T GetEnumFilterstring值,其中T:struct,Enum 这将编译,例如:

私有静态T GetEnumFilterstring值,其中T:struct,Enum=> Enum.TryParsevalue,out T结果?结果:抛出新的ExceptionInvalid值;
您不应该使用变量名来隐藏参数名。使用不同的名称表示输出T值和?value:@ckuri:已经有答案表明抱歉,在简化我的代码时犯了几个错误。感谢@HereticMonkey指出了错误,你不应该用变量名来掩盖你的参数名。使用不同的名称表示输出T值和?value:@ckuri:已经有答案表明抱歉,在简化我的代码时犯了几个错误。感谢@HereticMonkey指出了错误。感谢@Jon给出了惊人的快速回答。我已经修复了在简化SO时引入的问题中的代码错误,但我缺少的是对struct的超级简单添加。感谢@Jon给出了惊人的快速回答。我已经修复了在简化SO时引入的问题中的代码错误,但我缺少的是对struct的超级简单添加。