Как использовать небезопасный код в безопасном контексте?
Мне нужно использовать SecureString
для класса Microsoft, и я нашел следующий код в Интернете:
public static class SecureStringExt
{
public static SecureString ConvertToSecureString(this string password)
{
if (password == null)
throw new ArgumentNullException("password");
unsafe //Red highlighted line
{
fixed (char* passwordChars = password)
{
var securePassword = new SecureString(passwordChars, password.Length);
securePassword.MakeReadOnly();
return securePassword;
}
}
}
}
Единственная проблема заключается в том, что unsafe
Ключевое слово продолжает давать мне ошибку, говоря Cannot use unsafe construct in safe context
, К сожалению, я не мог найти, почему это происходит...
Примечание. Приведенный выше код запускается в LINQPad, но не в VS2013 (с помощью функции повышения резкости).
2 ответа
Решение
Я не уверен, что вам нужен небезопасный код в этом случае (см. Ответ @mybirthname).
Но когда требуется небезопасный код, его можно включить в свойствах проекта.
- В главном меню нажмите
Project
а потом<ProjectName> properties...
- Нажми на
Build
стр. - Выбрать
Allow unsafe code
,
Или можно явно указать / небезопасную опцию компилятора.
public static SecureString GetSecureString(string password)
{
SecureString secureString = new SecureString();
foreach (char c in password)
{
secureString.AppendChar(c);
}
secureString.MakeReadOnly();
return secureString;
}
Вы можете сделать то же самое без небезопасного кода.