当执行一个Selecton IEnumerable我相信检查空引用是一个好习惯,所以我经常Where在我之前有Select这样的:
someEnumerable.Where(x => x != null).Select(x => x.SomeProperty);
Run Code Online (Sandbox Code Playgroud)
访问子属性时,这会变得更加复杂:
someEnumerable.Where(x => x != null && x.SomeProperty != null).Select(x => x.SomeProperty.SomeOtherProperty);
Run Code Online (Sandbox Code Playgroud)
要遵循这种模式,我需要进行一次调用Where.我想创建一个扩展方法IEnumerable,根据引用的内容自动执行这样的空检查Select.像这样:
someEnumerable.SelectWithNullCheck(x => x.SomeProperty);
someEnumerable.SelectWithNullCheck(x => x.SomeProperty.SomeOtherProperty);
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?是fx.selector在创建扩展方法时可以从参数中检索选定的属性吗?
public static IEnumerable<TResult> SelectWithNullCheck<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
return source.Where(THIS IS WHERE THE AUTOMATIC NULL-CHECKS HAPPEN).Select(selector);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我在.NET Framework 4.5中使用C#5.0
我有一个抽象基类,该基类向用户模型声明了两个外键字段:
class BaseModel(models.Model):
updated = models.DateTimeField(null=True)
updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="updated_by")
created = models.DateTimeField(null=True)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="created_by")
class Meta:
abstract=True
Run Code Online (Sandbox Code Playgroud)
我有多个从此类继承的类。当我跑makemigrations,我收到以下错误为每个可能的类对和两个created_by和updated_by:
myapp.ClassA.updated_by :(字段E305)“ ClassB.updated_by”的反向查询名称与“ ClassB.updated_by”的反向查询名称发生冲突。
提示:在“ ClassA.updated_by”或“ ClassB.updated_by”的定义中添加或更改related_name参数。
即使我已经设置了related_name。它仅适用于声明的两个外键字段之一。
在一个抽象类中是否可能有两个相同的模型的外键字段,如果是的话,如何设置它?