![](/img/trans.png)
[英]How to assign a value of a property to a var ONLY if the object isn't 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.