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//有没有办法将代码长度降到最低?
发布于 2019-01-25 02:00:05
您可以使用对象初始化来缩短它的长度。
Homework homework = isposted
? new Homework
{
Id = 3,
Name = "Draw an Apple"
} : null;事实上,我有一个像作业一样的东西。oldHomework : null;
我假设您想要一个oldHomework的副本,那么您可以使用下面的代码
Homework homework = isposted
? new Homework
{
Id = oldHomework.Id,
Name = oldHomework.Name
} : null;发布于 2019-01-25 02:04:17
不能将值赋值给为空的对象。?用于读取属性,而不是设置属性。
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。你现在的做法是完美的。
发布于 2019-01-25 02:39:44
没有这样的操作符,实现您想要的最接近的方法是使用如下的扩展方法:
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语句。它不需要是一个扩展方法。
老实说,,我从来不会在真正的项目中使用这样的解决方案。您不应该仅仅为了使用更少的代码行而牺牲代码的可读性,这种解决方案甚至不能提高性能。我只想分享我能找到的最接近你问题的解决方案。
https://stackoverflow.com/questions/54357976
复制相似问题