首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当对象在c#中不为空时,如何为该对象的属性赋值

仅当对象在c#中不为空时,如何为该对象的属性赋值
EN

Stack Overflow用户
提问于 2019-01-25 01:56:36
回答 4查看 2.6K关注 0票数 1
代码语言:javascript
复制
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

//有没有办法将代码长度降到最低?

EN

回答 4

Stack Overflow用户

发布于 2019-01-25 02:00:05

您可以使用对象初始化来缩短它的长度。

代码语言:javascript
复制
Homework homework = isposted 
? new Homework
{
    Id = 3,
    Name = "Draw an Apple"
} : null;

事实上,我有一个像作业一样的东西。oldHomework : null;

我假设您想要一个oldHomework的副本,那么您可以使用下面的代码

代码语言:javascript
复制
Homework homework = isposted 
? new Homework
{
    Id = oldHomework.Id,
    Name = oldHomework.Name
} : null;
票数 4
EN

Stack Overflow用户

发布于 2019-01-25 02:04:17

不能将值赋值给为空的对象。?用于读取属性,而不是设置属性。

代码语言:javascript
复制
var x = homework.Id;   // Will throw an error if homework is NULL
var y = homework?.Id;  // Will be NULL if homework is NULL

对于设置属性,您肯定希望检查NULL,然后才将其设置为NULL。你现在的做法是完美的。

票数 2
EN

Stack Overflow用户

发布于 2019-01-25 02:39:44

没有这样的操作符,实现您想要的最接近的方法是使用如下的扩展方法:

代码语言:javascript
复制
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语句。它不需要是一个扩展方法。

老实说,,我从来不会在真正的项目中使用这样的解决方案。您不应该仅仅为了使用更少的代码行而牺牲代码的可读性,这种解决方案甚至不能提高性能。我只想分享我能找到的最接近你问题的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54357976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档