Convert.ChangeType("1", typeof(bool))
返回运行时错误
有没有办法覆盖这种行为?
我希望Convert.ChangeType("1", typeof(bool)) return
true
Convert.ChangeType("0", typeof(bool))
返回false
更新
阅读评论和答案也许我还不够清楚
假设有一个<object,Type>
字典,其中type是目标类型
foreach (var element in dictionary)
{
object convVal = Convert.ChangeType(element.Key, element.Value);
}
当element.Key
为"1"
且elemen.Value
为bool
时我想true
任何人都可以给我任何实施类似行为的建议
至少比这更好:
public static class Convert
{
public static object ChangeType(object val, Type type)
{
if (val is string && type == typeof(bool))
{
switch (((string)val).Trim().ToUpper())
{
case "TRUE":
case "YES":
case "1":
case "-1":
return true;
default:
return false;
}
}
return System.Convert.ChangeType(val, type);
}
}
TypeConverter可以是正确的方法吗?
请在发布评论或答案之前考虑或将问题标记为重复
答案 0 :(得分:4)
bool flag = Convert.ToBoolean(Convert.ToInt32("1"));
答案 1 :(得分:2)
我认为这种情况的最佳方法是使用如下方程式;
string myString = "1";
bool myBool = myString == "1";
答案 2 :(得分:1)
主要问题是,类型级别支持string
到bool
的转换,但大多数字符串值都失败。这意味着,您首先必须检查自定义转换规则,然后再返回默认转换器。一些CanConvert...
函数将返回true,导致实际转换时出现运行时异常。
因此,为了接受true
的任何非零数字字符串和false
的零,首先单独检查数字,然后使用自定义类型转换器,以防它们被提供并回退到默认值如果没有找到其他内容,您可以使用以下内容:
static object CustomConvert(object value, Type targetType)
{
decimal numericValue;
if ((targetType == typeof(bool) || targetType == typeof(bool?)) &&
value is string &&
decimal.TryParse((string)value, out numericValue))
{
return numericValue != 0;
}
var valueType = value.GetType();
var c1 = TypeDescriptor.GetConverter(valueType);
if (c1.CanConvertTo(targetType)) // this returns false for string->bool
{
return c1.ConvertTo(value, targetType);
}
var c2 = TypeDescriptor.GetConverter(targetType);
if (c2.CanConvertFrom(valueType)) // this returns true for string->bool, but will throw for "1"
{
return c2.ConvertFrom(value);
}
return Convert.ChangeType(value, targetType); // this will throw for "1"
}
注意我没有检查在两个类型转换器(From和To)已经失败之后尝试Convert.ChangeType
是否有用...此时只是抛出异常。
答案 3 :(得分:0)
怎么样:
bool x = myString.Equals("1");
答案 4 :(得分:0)
Convert.ToBoolean(Convert.ChangeType("1", typeof(uint)));