工具提示显示类型:
...但是编译会引发错误。乃至 ”!” 没有帮助。
public struct SOptions<T> where T : notnull {
public static SOptions<T> Default => new();
public int SomeProperty = 123;
}
public class Options<T> where T : notnull {
public int SomeProperty { get; private set; } = 0;
public Options(SOptions<T> options) => SetOptions_1(options);
public void SetOptions_1(SOptions<T>? options) {
options ??= SOptions<T>.Default;
// Строка ниже вызывает ошибку, код не компилируется
// error CS1061
SomeProperty = options!.SomeProperty;
}
// ... Такой вариант ошибок не вызывает.
public void SetOptions_2() {
var options = SOptions<T>.Default;
SomeProperty = options.SomeProperty;
}
// ... С этим тоже работает.
public void SetOptions_3(SOptions<T>? options) {
options ??= SOptions<T>.Default;
SomeProperty = ((SOptions<T>)options).SomeProperty;
}
}
使用不可为空的局部变量
或者不使用