Вы можете лучше понять ClassCastException и кастинг, как только вы поймете, что JVM не может угадать неизвестное. Если B является экземпляром A, он имеет больше членов класса и методов в куче, чем A. JVM не может угадать, как отличать A до B, поскольку цель сопоставления больше, а JVM не знает, как заполнить дополнительные элементы.
Но если A был экземпляром B, это было бы возможно, потому что A является ссылкой на полный экземпляр B, поэтому отображение будет взаимно однозначным.
Чтобы прочитать ввод во время отладки, вы можете использовать свойство console
в своих конфигурациях в launch.json
{
"version": "0.2.0",
"configurations": [{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceRoot}/bin/Debug/netcoreapp2.0/Hashing.dll",
"args": [],
"cwd": "${workspaceRoot}",
"console": "externalTerminal",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart"
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}
Вы можете использовать "externalTerminal"
или "integratedTerminal"
. "internalConsole"
, похоже, не работает.
Я использую настройку integratedTerminal
, поскольку терминал находится внутри самого VSCode. Теперь вы сможете читать ввод с помощью Console.ReadLine();
Я довольно новичок в c # -взаимном отладчике студии ...
попробуйте установить контрольную точку перед вашим
Console.Readline()
и отладить ее, перейдя через ваш код F10 (не F11).
он должен остановиться на
Console.Readline()
и дождаться ввода.