仅当对象在C#中不为null时,才如何为其分配值

时间:2019-01-25 01:56:37

标签: c#

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

//有什么方法可以减少代码长度?`

3 个答案:

答案 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语句。不需要是扩展方法。

  

说实话我永远不会在实际项目中使用这种解决方案。您不应该仅仅为了减少代码行而牺牲代码的可读性,该解决方案甚至不能提高性能。我只想分享我可以为您的问题找到的最接近的解决方案。