Homework homework = isposted ? new Homework() : null;
If(homework != null)
{
homework.Id = 3;
homework.Name = "Draw an Apple";
}
// Why can't I use like this ?
homework ? .Id = 3;
homework ? .Name = "Draw an Apple"; // instead of checking for if condition
//有什么方法可以减少代码长度?`
答案 0 :(得分:3)
您可以使用对象初始化将其缩短一些
Homework homework = isposted
? new Homework
{
Id = 3,
Name = "Draw an Apple"
} : null;
实际上,我有一个类似Homework homework = isposted的对象。 oldHomework:null;
我假设您想要oldHomework
的副本,那么您可以在下面使用此代码
Homework homework = isposted
? new Homework
{
Id = oldHomework.Id,
Name = oldHomework.Name
} : null;
答案 1 :(得分:1)
您不能将值分配给NULL对象。 filterContext.Result = new HttpUnauthorizedResult();
用于读取属性,而不用于设置它们。
?
对于设置属性,您肯定要检查NULL,然后仅在不为NULL的情况下进行设置。恰恰是您做事的完美方式。
答案 2 :(得分:0)
没有这样的运算符,实现您想要的最接近的方法是使用如下扩展方法:
public static class Extensions
{
public static void IfNotNull<T>(this T obj, Action<T> action)
{
if (obj == null)
return;
action(obj);
}
}
Homework homework = isposted ? new Homework() : null;
homework.IfNotNull(h => h.Id = 3);
homework.IfNotNull(h => h.Name = "Draw an Apple");
但是,扩展方法仍使用if
语句。不需要是扩展方法。
说实话我永远不会在实际项目中使用这种解决方案。您不应该仅仅为了减少代码行而牺牲代码的可读性,该解决方案甚至不能提高性能。我只想分享我可以为您的问题找到的最接近的解决方案。