gpt4 book ai didi

c# - 将 T 转换为 bool,反之亦然

转载 作者:太空狗 更新时间:2023-10-29 20:14:04 25 4
gpt4 key购买 nike

我有以下字符串扩展方法可以做到这一点 ("true").As<bool>(false)特别是对于 bool 值,它将使用 AsBool()做一些自定义转换。不知何故,我无法从 T 转换为 Bool,反之亦然。我使用以下代码让它工作,但它似乎有点矫枉过正。

是关于这一行的:
(T)Convert.ChangeType(AsBool(value, Convert.ToBoolean(fallbackValue)), typeof(T))
我宁愿使用下面的,但它不会编译:
(T)AsBool(value, (bool)fallbackValue), typeof(T))

我是不是错过了什么,或者这是最短的路吗?

    public static T As<T>(this string value)
{
return As<T>(value, default(T));
}
public static T As<T>(this string value, T fallbackValue)
{
if (typeof(T) == typeof(bool))
{
return (T)Convert.ChangeType(AsBool(value,
Convert.ToBoolean(fallbackValue)),
typeof(T));
}
T result = default(T);
if (String.IsNullOrEmpty(value))
return fallbackValue;
try
{
var underlyingType = Nullable.GetUnderlyingType(typeof(T));
if (underlyingType == null)
result = (T)Convert.ChangeType(value, typeof(T));
else if (underlyingType == typeof(bool))
result = (T)Convert.ChangeType(AsBool(value,
Convert.ToBoolean(fallbackValue)),
typeof(T));
else
result = (T)Convert.ChangeType(value, underlyingType);
}
finally { }
return result;
}
public static bool AsBool(this string value)
{
return AsBool(value, false);
}
public static bool AsBool(this string value, bool fallbackValue)
{
if (String.IsNullOrEmpty(value))
return fallbackValue;
switch (value.ToLower())
{
case "1":
case "t":
case "true":
return true;
case "0":
case "f":
case "false":
return false;
default:
return fallbackValue;
}
}

最佳答案

您可以将其转换为 object,然后转换为 T:

if (typeof(T) == typeof(bool))
{
return (T)(object)AsBool(value, Convert.ToBoolean(fallbackValue));
}

关于c# - 将 T 转换为 bool,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12110759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com