无法从 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),但是对于阅读您的代码的人来说,这可能并不明显。