无法从 out T 转换为除 c# 中的字符串以外的任何类型
Cannot convert from out T in any type than string in c#
这是我的转换方法
public bool TryGetUserSetting<T>(string userSettingName, out T result)
{
try
{
var userSetting = Properties.Settings.Default[userSettingName];
if (userSetting == null)
{
result = default!;
return false;
}
result = (T)userSetting;
return true;
}
catch (ConfigurationErrorsException)
{
result = default!;
return false;
}
}
但只有当值为字符串
时才输出结果
if (!_userSettingsProviderService.TryGetUserSetting("SerialPortName", out string serialPortName) || !_userSettingsProviderService.TryGetUserSetting("SerialPortBaudRate", out int serialPortBaudRate)
var serialName = serialPortName;
var baudRate = serialPortBaudRate;
Return 波特率错误“使用未分配的局部变量 'serialPortBaudRate'。
如果第一次调用 TryGetUserSetting
将 return false
,则条件将立即假定为 true
(因为 !TryGetUserSetting(...)
)。在这种情况下,将不会执行对 TryGetUserSetting
的第二次调用,并且 serialPortBaudRate
将保持未分配状态。你试图在 if
块中使用这个未分配的变量。
因此,您可以在 if
语句
之前移动 out
变量的声明
string serialPortName = null;
int serialPortBaudRate = -1;
if (!_userSettingsProviderService.TryGetUserSetting("SerialPortName", out serialPortName) || !_userSettingsProviderService.TryGetUserSetting("SerialPortBaudRate", out serialPortBaudRate)
您还可以将 conditional logical OR (||)
替换为序数 logical OR (|)
,即使第一个参数是 true
,它也将始终计算两个参数(有关详细信息,请参阅 here),但是对于阅读您的代码的人来说,这可能并不明显。
这是我的转换方法
public bool TryGetUserSetting<T>(string userSettingName, out T result)
{
try
{
var userSetting = Properties.Settings.Default[userSettingName];
if (userSetting == null)
{
result = default!;
return false;
}
result = (T)userSetting;
return true;
}
catch (ConfigurationErrorsException)
{
result = default!;
return false;
}
}
但只有当值为字符串
时才输出结果if (!_userSettingsProviderService.TryGetUserSetting("SerialPortName", out string serialPortName) || !_userSettingsProviderService.TryGetUserSetting("SerialPortBaudRate", out int serialPortBaudRate)
var serialName = serialPortName;
var baudRate = serialPortBaudRate;
Return 波特率错误“使用未分配的局部变量 'serialPortBaudRate'。
如果第一次调用 TryGetUserSetting
将 return false
,则条件将立即假定为 true
(因为 !TryGetUserSetting(...)
)。在这种情况下,将不会执行对 TryGetUserSetting
的第二次调用,并且 serialPortBaudRate
将保持未分配状态。你试图在 if
块中使用这个未分配的变量。
因此,您可以在 if
语句
out
变量的声明
string serialPortName = null;
int serialPortBaudRate = -1;
if (!_userSettingsProviderService.TryGetUserSetting("SerialPortName", out serialPortName) || !_userSettingsProviderService.TryGetUserSetting("SerialPortBaudRate", out serialPortBaudRate)
您还可以将 conditional logical OR (||)
替换为序数 logical OR (|)
,即使第一个参数是 true
,它也将始终计算两个参数(有关详细信息,请参阅 here),但是对于阅读您的代码的人来说,这可能并不明显。