0

我有一个字符串数组,其中大部分是字符串值“true”或“false”,还有其他字符串,但我不想更改它们。

所以我希望遍历字符串,在遇到单词“true”或“false”的地方我想将字符串更改为“1”或“0”

这些 1、0 和其他字符串最终将用作传递给 SQL 存储过程 IE 的参数: seCmd.Parameters["@CheckListRef"].Value = data[0];

我只是在语法上苦苦挣扎,因此寻求指导

string[] data = args.Trim().Split(',');

// Loop over strings
foreach (string s in data)
{
    if(s == "true")
    {
        convert the string True to the string 1
    }
    else if(s == "false")
    {
      convert the string True to the string 0
    }
}

请有人提供一些指导

4

8 回答 8

2

您的代码缺少的是对您正在检查的数组位置的引用。

使用for循环可以让您保留该参考:

string[] data = args.Trim().Split(',');

// Loop over strings
for(int i = 0; i < data.Length; i++)
{
    if(data[i] == "true")
    {
        data[i] = "1";
    }
    else if(data[i] == "false")
    {
        data[i] = "0";
    }
}

注意 - 以上内容区分大小写,因此您可能希望将字符串测试替换为data[i].Equals("true", StringComparison.InvariantCultureIgnoreCase).

于 2013-04-16T12:01:22.877 回答
1

这应该有助于:

   string[] data = args.Trim().Split(',');

    for(int i = 0; i < data.Length; i++)
    {
        if(data[i] == "true")
        {
            data[i] = "1";
        }
        else if(data[i] == "false")
        {
            data[i] = "0";
        }
    }

此外,您可以通过执行以下操作来缩短代码:

   string[] data = args.Trim().Split(',');

    for(int i = 0; i < data.Length; i++)
    {
        data[i].Replace("true", "0").Replace("false", "1");
    }
于 2013-04-16T12:01:55.367 回答
1

这是 LINQ 版本,它将返回一个新数组:

string[] newData = data.Select(r => (r == "true" ? "1" : r == "false" ? "0" : r))
                        .ToArray();

或者,如果您想忽略大小写,则:

newData = data.Select(r => 
           (r.Equals("true", StringComparison.CurrentCultureIgnoreCase) ? "1" 
           :r.Equals("false", StringComparison.CurrentCultureIgnoreCase) ? "0" 
           : r))
           .ToArray();
于 2013-04-16T12:03:38.530 回答
0
string originalString = "true, True, FALSE,  something true,false,something else,false";
string resultString = Regex.Replace(
                originalString, @"((?<=(,\s*))|^)true((?=(\s*,))|$)", "1",RegexOptions.IgnoreCase);
resultString = Regex.Replace(
                resultString, @"((?<=(,\s*))|^)false((?=(\s*,))|$)", "0", RegexOptions.IgnoreCase);
string[] resultArray = Regex.Split(resultString, @"\s*,\s*");

结果数组:

 1
 1
 0
 something true
 0
 something else
 0
于 2013-04-16T12:09:19.983 回答
0
var data = args.Trim()
               .Split(',')
               .ToList()
               .ConvertAll(s => s.Replace("true", "1").Replace("false", "0"));
于 2013-04-16T12:09:42.740 回答
0

您不必将其转换为1 or 0. Convert.ToBoolean()如果您的数据类型是,只需执行bit以下操作:

bool bln;
if(bool.TryParse(data[0], out bln))
 {
   seCmd.Parameters.Add("@CheckListRef",SqlDbType.Bit).Value =bln;
 }
于 2013-04-16T12:04:49.417 回答
0

我会为此使用 for 循环,但是在您的情况下,这不起作用

if(s == "true")
{
    s="1";
}
else if(s == "false")
{
  s="0";
}
于 2013-04-16T12:05:28.833 回答
0

寻找一个 LINQ 表达式:

var parsedData = data.Trim()
.Where(d => d == "true" || d == "false")
.Select(d => bool.Parse(d) ? "1" : "0")
.ToList();
于 2013-04-16T12:07:21.387 回答