c#中对于“如果foo = n't null”有什么好的语法?返回它的一个属性,否则为空
本文关键字:语法 返回 一个 属性 什么 如果 foo null | 更新日期: 2023-09-27 18:14:39
在下面的小代码片段中,我有一个简单动态对象的包装器类,当它不为空时,我可以访问两个属性,"id"answers"name"。这是一个Facebook对象,供在家玩的人使用。
无论如何,在我的GET访问器中,你可以看到我必须检查我给定的动态对象是否为null,因为在null引用上引用动态属性将AV。但由于我可能是第一百万个人这样做,我假设有一种更简洁优雅的方式来表达它。
请开导我,哦,伟大的圣人。谢谢!
public class IdNamePair
{
private dynamic _data;
public IdNamePair(dynamic data)
{
_data = data;
}
public string Id
{
get
{
return (_data == null) ? null : _data.id;
}
}
public string Name
{
get
{
return (_data == null) ? null :_data.name;
}
}
}
你所做的没有错,我唯一要做的就是放下括号并改变计算:
return _data != null ? _data.name : null;
这样做只是(IMVHO)稍微容易阅读,但基本上是相同的,你有
不,这就是你必须要做的。我猜你比你想象的要聪明。
使用您已经拥有的代码最有可能是最好的解决方案。但是如果你愿意,你可以创建一个像这样的扩展方法:
public static TResult Select<T, TResult>(this T obj, Func<T, TResult> func)
where T : class
where TResult : class
{
return obj == null ? null : func(obj);
}
,并像这样使用:
public string Id
{
get
{
return _data.Select(d => d.id);
}
}
但是这会使代码对大多数人来说可读性变差。这个方法应该有个更好的名字
这样做基本上将可空引用类型视为Maybe monad。