Компилятор потерял тип?
Причем подсказка отображает тип:
... но компиляция вызывает ошибку. И даже "!" не помогает.
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;
}
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Используйте не nullable локальную переменную
public void SetOptions_1(SOptions<T>? options)
{
SOptions<T> opt = options ?? SOptions<T>.Default;
SomeProperty = opt.SomeProperty;
}
Или не используйте
public void SetOptions_1(SOptions<T>? options)
{
if (options.HasValue)
{
SomeProperty = options.Value.SomeProperty;
}
}

