簡體   English   中英

僅當對象在C#中不為null時,才如何為其分配值

[英]How to assign a value to a property of an object only if that object is not null in 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

//是否有任何方法可以最小化代碼長度?

您可以使用對象初始化將其縮短一點

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;

您不能將值賦給NULL的對象。 ? 用於讀取屬性,而不是設置屬性。

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的情況下進行設置。 恰恰是您執行操作的方式是完美的。

沒有這樣的運算符,實現您想要的最接近的方法是使用如下擴展方法:

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語句。 它不必是擴展方法。

老實說, 我永遠不會在實際項目中使用這種解決方案 您不應該僅僅為了減少代碼行而犧牲代碼的可讀性,該解決方案甚至不能提高性能。 我只想分享我可以為您的問題找到的最接近的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM