- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这个代码片段,它没有可为 null 的警告。
public class Foo {
public string Property { get; } = "Some String";
}
public class Bar {
[DisallowNull]
public Foo? Foo { get; private set; }
[MemberNotNull(nameof(Foo))]
public void MyMethod() {
Foo = new Foo();
// After setting Foo, I use Foo.Property in some way
Console.WriteLine(Foo.Property);
}
}
因为在我的真实代码中,我在设置Foo
很多之后使用Foo.Property
,我想添加一个“方便的属性”到 Bar
直接返回它,这样我就可以用一个更短的名字访问它(Foo
在我的真实代码中实际上是一个相当长的名字):
// in Bar
public string? Property => Foo?.Property;
// ...
// Now I can do:
Console.WriteLine(Property);
但是,现在 Bar.Property
是可以为 null 的,即使在 Foo
绝对不为 null 的地方(比如刚设置完 Foo
).所以当我在不允许 null 的地方使用 Property
时,编译器会给我警告。
我以为我需要的是用NotNullIfMemberNotNull(nameof(Foo))
之类的东西来注释Property
,但是在查找之后,this attribute is only proposed, and doesn't exist yet .
我该如何解决这个问题?
最佳答案
我想出的一个解决方法是让 Foo
和 Property
都有支持字段。在Foo
的setter 中,还设置了Property
。这样,我们就可以将 MemberNotNull
属性添加到 Foo
的 setter 中。
private Foo? foo;
[DisallowNull]
public Foo? Foo {
get => foo;
[MemberNotNull(nameof(Property))]
private set {
foo = value;
Property = value.Property;
}
}
public string? Property { get; private set; }
但是,这不是很普遍。它之所以有效,是因为 Foo
恰好被标记为 DisallowNull
。
关于c# - 如何让 C# 意识到方便属性的可空性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68619723/
我注意到 Javascript 排序功能在低于 9 的 Internet Explorer 版本中非常慢(与 Firefox 和其他版本相比通常慢一个数量级。我正在实现我自己的版本以查看是否可以做得更
我有一个实现ContainerRequestFilter的类,我想向其中注入(inject)一些spring依赖项,所以我需要让Spring知道Jersey过滤器。过滤器本身是在我的 web.xml
有没有办法让 Mypy 意识到我知道我正在处理什么类型的对象,而无需在每个 if 语句中调用 isinstance?我希望有辅助函数来做那种事情,但即使我在辅助函数中有 isinstance,Mypy
我必须用法语翻译一个网站。现在,法语和许多其他语言一样,有性别和屈折变化。问题是: 如何创建包含可变部分为男性或女性的消息的 yaml 文件... 如何修改 i18n 生成器以支持此功能? 是否有任何
正如我发现的那样,Chrome 不会忽略空的 src,而是将当前查看的文件加载到其中。由于这个“功能”,我的统计数据出现了错误。 用这段代码创建 file.php... Here is my pag
我是一名优秀的程序员,十分优秀!