我有一个字符串数组,其中大多数是字符串值“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
}
}
请有人提供一些指导
答案 0 :(得分: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)
替换字符串测试。
答案 1 :(得分: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");
}
答案 2 :(得分: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();
答案 3 :(得分:0)
您无需将其转换为1 or 0
。如果您的数据类型为Convert.ToBoolean()
,只需执行bit
,然后尝试:
bool bln;
if(bool.TryParse(data[0], out bln))
{
seCmd.Parameters.Add("@CheckListRef",SqlDbType.Bit).Value =bln;
}
答案 4 :(得分:0)
我会为此使用for循环,但在你的情况下这不起作用
if(s == "true")
{
s="1";
}
else if(s == "false")
{
s="0";
}
答案 5 :(得分:0)
寻找LINQ表达式:
var parsedData = data.Trim()
.Where(d => d == "true" || d == "false")
.Select(d => bool.Parse(d) ? "1" : "0")
.ToList();
答案 6 :(得分: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*");
resultArray:
1
1
0
something true
0
something else
0
答案 7 :(得分:0)
var data = args.Trim()
.Split(',')
.ToList()
.ConvertAll(s => s.Replace("true", "1").Replace("false", "0"));