Как использовать небезопасный код в безопасном контексе?
Мне нужно использовать 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 (с resharper).
Ответы
Ответ 1
Я не уверен, что вам нужен небезопасный код в этом случае (см. ответ @mybirthname).
Но когда необходим небезопасный код, его можно включить в свойствах проекта.
- В главном меню нажмите
Project
, а затем <ProjectName> properties...
- Нажмите на страницу
Build
.
- Выберите
Allow unsafe code
.
![Разрешить небезопасный код]()
Или можно указать /unsafe параметр компилятора явно.
Ответ 2
public static SecureString GetSecureString(string password)
{
SecureString secureString = new SecureString();
foreach (char c in password)
{
secureString.AppendChar(c);
}
secureString.MakeReadOnly();
return secureString;
}
Вы можете сделать то же самое без небезопасного кода.