c# - 当枚举不可为空且没有任何空选项时,检查它是否为空
问题描述
这与下面的问题不同
我正在使用现有的 DataContract 类创建 WCF Rest 服务。我不能将枚举之类的属性数据类型更改为枚举?并且也不能在我的枚举中添加新选项,如未定义、无,或者默认设置任何内容,因为如果我做这些更改中的任何一个,它将产生广泛的影响,许多应用程序都依赖它。
通常人们使用像 POSTMAN 这样的应用程序调用我的 WCF REST 服务,他们在其中发送 json 数据,如下所示,其中性别是男性、女性、跨性别等的枚举。如果他们不发送它,我的服务会抛出异常,我想添加验证当 QA 使用 POSTMAN 调用我的服务并发送 JSON 数据时检查枚举是否为空的逻辑,即使它不可为空并且我的枚举中也没有任何 None、Null 选项?如果它是 NULL 我想ArgumentNullException
用好消息发回给呼叫者。我想优雅地处理这种情况。
public enum Gender
{
Male = 0,
Female = 1,
Transgender = 2
}
下面不错
{
"Name" : "XXX"
"Gender" : "1"
}
下面抛出错误
{
"Name" : "XXX"
"Gender" : ""
}
解决方案:
感谢 pswg 指出正确的方向,我在下面标记了他的答案。我正在使用 Newtonsoft,所以我喜欢下面
string stringfydata = Newtonsoft.Json.JsonConvert.SerializeObject(requestGender);
if(string.IsNullOrEmpty(stringfydata))
{
throw new ArgumentNullException("Gender value cannot be NULL or Empty.");
}
解决方案
除了在类中扭曲枚举的明显选项(这在您的特定情况下可能不起作用)之外,您可以将枚举变量设置为枚举范围之外的整数。之后,您可以检查整数是否在枚举中定义。由于 C#不检查枚举,因此您可以执行以下操作:
public enum Gender
{
Male = 0,
Female = 1,
Transgender = 2
}
public int HandleGender(string strJsonGender){
if (strJsonGender == "")
{
return -1;
}
else {
// Get int representation of the gender
return (int)((Gender)Enum
.Parse(typeof(Gender),
strJsonGender, true));
}
}
public void MainMethod(string strJsonGender) {
Gender gVal;
int iVal = HandleGender(strJsonGender);
if (Enum.IsDefined(typeof(Gender), iVal))
{
// Handle if the an actual gender was specified
gVal = (Gender)iVal;
}
else {
// Handle "null" logic
}
推荐阅读
- unity3d - 在 Unity 中向游戏对象添加材质使其不可见
- python - 如何使用openpyxl比较excel表单列中的日期时间对象?
- python - 如何阅读两个文档,格式化它们然后比较它们
- php - 从循环中输出值导致值为零
- reactjs - 执行函数时是否可以重新运行 componentDidMount?
- vba - 按用户访问 VBA 过滤器
- ios - Swift:当组合不是一个好的选择时,共享与状态相关的逻辑
- python - 如何在 Amazon Linux AMI 2018.03.0 (HVM) 上正确设置 cron 作业?
- javascript - JavaScript 正则表达式替换字符串的所有部分,但包含特定字符串的部分除外
- javascript - 为什么我需要硬编码凭证才能使用 javascript SDK 连接到 AWS?