作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个枚举方法,如下所示:
public static TEnum GetEnumByStringValue<TEnum>(string value) where TEnum : struct, IConvertible, IComparable, IFormattable
{
if(!typeof(TEnum).IsEnum)
{
throw new ArgumentException("TEnum must be an enumerated type.");
}
Type type = typeof(TEnum);
FieldInfo[] fieldInfos = type.GetFields();
foreach (FieldInfo fieldInfo in fieldInfos)
{
StringValue[] stringValues = fieldInfo.GetCustomAttributes(typeof(StringValue), false) as StringValue[];
if (stringValues != null)
{
foreach (StringValue stringValue in stringValues)
{
if (stringValue.Value.Equals(value))
{
return (TEnum)Enum.Parse(typeof(TEnum), fieldInfo.Name);
}
}
}
}
throw new ArgumentOutOfRangeException("value", "Value was not found in enum's string values.");
}
TryGetEnumByStringValue
, 返回 true 或 false 而不是抛出类似于
int.Parse
的概念的异常和
int.TryParse
.在我看来,在我的新方法中,我可以调用另一个方法,捕获异常(如果有)并相应地返回,或者我可以重构现有方法以返回
bool
再次在我的新方法中,只需调用现有方法并在返回 false 时抛出异常。
bool
指示是否抛出异常,但这不太适合我。
最佳答案
如果你已经有了 throws 的方法,那么很容易制作 Try...
它的变体使用...惊喜! try/catch
:
public bool TryReturnSomething(..., out SomeType result) // ... - parameters
{
try
{
result = ReturnSomething();
return true;
}
catch(SomeException1 e) { } // catch all expected exception types
catch(SomeException2 e) { }
return false;
}
Try...
单独完成和正常的变体。见例如
double.Parse()和
double.TryParse() , 第一个会
throw
当验证和其他返回false。
Try..
返回 false 和其他抛出)。
关于c# - TryGet 方法风格的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37546622/
我有一个枚举方法,如下所示: public static TEnum GetEnumByStringValue(string value) where TEnum : struct, IConvert
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
JavaScript map有两种方法 get和 has .如果元素不存在,方法 get 返回 undefined 或者如果值 undefined 被添加到 map 。 所以如果我实现我的方法 Get
在对 "How to implement List, Set, and Map in null free design?" 的评论中, Steven Sudit我开始讨论使用回调,处理“找到”和“未找
我是一名优秀的程序员,十分优秀!