Почему знак вопроса (нулевой) после общего параметра типа игнорируется в определенных контекстах, если аргумент типа явлC#

Место общения программистов C#
Ответить
Anonymous
 Почему знак вопроса (нулевой) после общего параметра типа игнорируется в определенных контекстах, если аргумент типа явл

Сообщение Anonymous »

Я наткнулся на поведение, которое сбивает меня с толку и блокирует меня от достижения прогресса. Множество способов, которыми я могу обойти это, но я хочу хотя бы понять, что происходит.
это кажется , что знак вопроса (обозначение нуля) игнорируется, когда помещается после параметра типа (например, в списке параметров метода шаблона), но только если аргумент типа - это тип значения, а не тип ссылки. Ожидается: < /p>
public class Foo
{
public void Bar(T? _) { } // Notice the question mark
}

public class Test { } // Test is a reference type

Test? NullableType = new();
Foo foo = new();
foo.Bar(NullableType); // Works fine
< /code>
Но следующее не работает. Единственное изменение заключается в том, что тип теста теперь является типом значения. < /P>
public class Foo
{
public void Bar(T? _) { } // Notice the question mark
}

public struct Test { } // Test is now a value type

Test? NullableType = new();
Foo foo = new();
foo.Bar(NullableType); // Error CS1503 - Argument 1: cannot convert from 'Test?' to 'Test'
< /code>
может кто -нибудь просветить меня? Есть ли простой способ исправить это, не меняясь слишком сильно?

Подробнее здесь: https://stackoverflow.com/questions/796 ... ored-in-ce
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»