两行代码如下:
BlogPost post = _postRepository.GetById(contentId); return post == null ? default(Guid) : post.UserId;
两行代码的另一种实现:
BlogPost post; return (post = _postRepository.GetById(contentId)) == null? default(Guid) : post.UserId;
想要达到的一行代码效果(下面的代码只是示例,不能通过编译):
return (BlogPost post = _postRepository.GetById(contentId)) == null? default(Guid) : postUserId;
如果用Javascript,可以实现:
return (post = GetById(1)) == null ? "" : post.UserId;
return _postRepository.GetById(contentId) == null? default(Guid) :_postRepository.GetById(contentId).UserId;
我只会这样。。。。
这样会调用两次_postRepository.GetById(contentId)
@dudu: 知道会这么说的>_<
@松鼠鱼:
这样写方法的返回签名都变了。所以估计更不能够算了。
@dudu:
return new Func<BlogPost, GUID>((b) => { return (b=_postRepository.GetById(contentId)) == null? default(Guid) : post.BlogSite.UCUserID.Value;}).Invoke(new BlogPost());
改了一下。。。刚刚少invoke了 此外假设返回的是GUID类型
@松鼠鱼:
return (_postRepository.GetById(contentId) ?? new BlogPost(UserId= default(Guid))).UserId;
貌似这样写就成。没做测试。。
@imfunny:
哎呀,的确貌似。。。。??运算符从没用过,不过看上去的确是对的
return _postRepository.GetById(contentId) == null ? default(Guid) : _postRepository.GetById(contentId) .UserId;
return (_postRepository.GetById(contentId) ?? new BlogPost(UserId= default(Guid))).UserId;
这个样子估计编译会有问题,
_postRepository.GetById(contentId) 这个是实体post
BlogPost(UserId= default(Guid))).UserId 这个是实体的属性
实际上不是这样解析的。
(_postRepository.GetById(contentId) ?? new BlogPost(UserId= default(Guid))返回了一个不能够为空的属性。
如果为空了就赋默认值。
然后把UserId返回。
@imfunny:
貌似有点靠谱,少看了一个)。
namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Person c=new Person(); c.Name="123"; Console.Write(c.Name+Environment.NewLine); c = null; Console.Write((c?? new Person()).Name); Console.ReadKey(); } public class Person { private int _id; private string _name="456"; public Person() { } public int Id { get { return _id; } set { _id = value; } } public string Name { get { return _name; } set { _name = value; } } } } }
随手写了个console。的确如此。
return _postRepository.GetById(contentId)UserId ?? default(Guid);
return _postRepository.GetById(contentId).UserId ?? default(Guid);
刚才少写了一个点
@淘@淘:
在_postRepository.GetById(contentId)返回null的时候会抛出未将对象引用到实例的。。