c# - C# 7.3 处理通用枚举约束中可能存在的错误
问题描述
以下代码无法在 C# 7.3 中编译,即使它支持限制为枚举的泛型:
using System;
public class Test<T> where T: Enum
{
public void Method()
{
if (!Enum.TryParse<T>("something", out var value))
throw new Exception("Oops");
}
}
我使用Enum
约束的其他代码确实有效,因此我拥有所有内容的正确版本,它似乎无法调用另一个也被限制为Enum
.
这是一个错误还是我误解了它应该如何工作。
解决方案
你需要一个额外的约束:
public class Test<T> where T: struct, Enum
{
public void Method()
{
if (!Enum.TryParse<T>("something", out var value))
throw new Exception("Oops");
}
}
使用 just where T : Enum
,您可以调用new Test<Enum>().Method();
-- 即传入Enum
类型,而不是任何特定类型的枚举。添加struct
意味着您必须传入特定类型的枚举。
更具体地说,Enum.TryParse<T>
有约束where T : struct
,所以你需要在你的方法中匹配这个约束。
推荐阅读
- python - Dask AttributeError:“DataFrame”对象没有属性“_repr_data”
- cordova - 科尔多瓦:transformClassesWithDexForReleaseDex:将字节码转换为dex时出错
- javascript - Angular 7 数据绑定被延迟
- asp.net-core - 在没有实体框架的情况下使用 ASP.NET Core Web API
- javascript - 如何在打字稿中找到一棵树内的一棵树
- c - 计算这个序列的公式是什么?
- python - 多个子弹pygame
- python - tfidf 空词汇;也许文档只包含停用词
- javascript - 如何在 Alexa Skill 中重新启动对话
- r - 从现有变量创建新的分类变量