【问题标题】:Convert.ChangeType from int to boolConvert.ChangeType 从 int 到 bool
【发布时间】:2013-10-03 16:23:49
【问题描述】:

如果需要,使用以下内容从查询字符串中获取值并转换为特定类型。

public static T Convert<T>(NameValueCollection QueryString, string KeyName, T DefaultValue) where T : IConvertible
    {
        //Get the attribute
        string KeyValue = QueryString[KeyName];

        //Not exists?
        if (KeyValue == null) return DefaultValue;

        //Empty?
        if (KeyValue == "") return DefaultValue;

        //Convert
        try
        {
            return (T)System.Convert.ChangeType(KeyValue, typeof(T));
        }
        catch
        {
            return DefaultValue;
        }
    } 

会这样调用

int var1 = Convert<int>(HttpContext.Current.Request.QueryString,"ID", 0);

但是,当尝试执行以下操作时,它无法正常工作,所以我的问题是,如果从查询字符串变量中检索到的值是 1 或 0 而不是 true假的。

ie... instead of
http://localhost/default.aspx?IncludeSubs=true
the call is
http://localhost/default.aspx?IncludeSubs=1

bool var1 = Convert<bool>(HttpContext.Current.Request.QueryString,"IncludeSubs", false);

【问题讨论】:

  • “无法正常工作”是什么意思?明确指出哪里出了问题,我们无法猜测。
  • Convert.ChangeType("1", typeof(bool))(传递string)不起作用。 Convert.ChangeType(1, typeof(bool))(传递int)可以。
  • 我很抱歉没有说得太具体。 QueryString[KeyName] 行以字符串形式返回它检索到的任何内容的值......所以它基本上被传入,正如您在响应中的第一行中所看到的那样。我收到的异常是“字符串未被识别为有效的布尔值”
  • 基本上我正在寻找像 Convert.ToBoolean(stringval) 这样的方法,但没有特定于布尔值...如果我键入方法 T,convert.changetype 会知道,如果我得到一个字符串并传入除 0 以外的数字,结果为 true

标签: c# int boolean


【解决方案1】:

您可以修改您的转换方法以处理布尔值,如下所示:

//Convert
try
{
    var type = typeof(T);
    if(type == typeof(bool))
    {
        bool boolValue;
        if(bool.TryParse(KeyValue, out boolValue))
            return boolValue;
        else
        {
            int intValue;
            if(int.TryParse(KeyValue, out intValue))
                return System.Convert.ChangeType(intValue, type);
        }
    }
    else
    {
        return (T)System.Convert.ChangeType(KeyValue, type);
    }
}
catch
{
    return DefaultValue;
}

通过这种方式,您可以转换为布尔值,例如:"true""False""0""1"

【讨论】:

  • 这是我想做的事情,但是通过在方法主体中放置特定的类型测试,它使通用方法的通用性降低了一些。它确实提供了一个可能的解决方案,但我希望有一些内置的东西可以为我处理转换,而无需输入特定类型的信息。
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 2019-05-17
  • 2023-04-04
  • 2021-07-21
相关资源
最近更新 更多