string [] []得到小写

jop*_*aus 1 c# c#-4.0

我正在努力从头开始创建一个数据库.我有一个锯齿状的叫做data数组,我试着克隆(lns)它,克隆(lns)变成小写,所以也data变成了.但我不希望这样!我怎么能阻止这个?ignorecase是真的.如果我将其设置为false,则不再出现问题.

你可能不相信,至少我没有,所以我上传了一个视频.

    public string[][] getRows(string[][] data, int columnLength, int index = -1, string arg = "", bool ignoreCase = false, bool getContaining = false)
    {
        if (index >= columnLength) return null; // I love null!
        if (!getContaining && arg == "") return data;

        string[][] toReturn = new string[data.Length][];
        string[][] lns = data;
        int a = 0;

        if (ignoreCase)
        {
            arg = arg.ToLower();
            for (int i = 0; i < columnLength; i++)
                for (int j = 0; j < lns.Length; j++)
                    lns[j][i] = lns[j][i].ToLower();
        }



        if (index >= 0)
        {
            if (getContaining)
            {
                for (int i = 0; i < data.Length; i++)
                    if (lns[i][index].Contains(arg))
                    {
                        toReturn[a] = data[i];
// code continues...
Run Code Online (Sandbox Code Playgroud)

编辑:好的,我现在知道这lns = data不是克隆,而只是制作另一个变量.但是我如何克隆它以便我可以执行此代码?

use*_*740 5

string[][] lns = data;,在分配期间,没有数据阵列的复制/克隆/复制.

所以lns[j][i] = lns[j][i].ToLower();相当于data[j][i] = data[j][i].ToLower();修改的原始数据/阵列.

我只是简单地将不区分大小写的比较移动到条件本身.平凡的,可能如下所示 - 记得删除原始if (ignoreCase) {..}代码.

// Move logic to condition (don't change any data)
  if (ignoreCase && lns[i][index].ToLower().Contains(arg.ToLower())
      || lns[i][index].Contains(arg)) {
    toReturn[a] = data[i];
    // ..
Run Code Online (Sandbox Code Playgroud)

对于更整洁的不区分大小写的替代方法,请参阅不区分大小写的'包含(字符串)'和/或考虑使用谓词lambda /函数.


好吧,因为我确实提到了上面的"整洁"方式..

// Predicate methods (defined in class) 
bool ContainsSensitive (string a, string b) {
   return a.Contains(b);
}
bool ContainsInsensitive (string a, string b) {
   // From https://stackoverflow.com/a/444818/2864740
   return a.IndexOf(b, StringComparison.OrdinalIgnoreCase) >= 0;
}

// In function:
Func<string,string,bool> contains = ignoreCase
    ? ContainsInsensitive
    : ContainsSensitive;

// Move logic to condition, but use predicate function to move
// the actual logic elsewhere.
  if (contains(lns[i][index], arg)) {
    toReturn[a] = data[i];
    // ..
Run Code Online (Sandbox Code Playgroud)

只是C#期待的一些精彩......我可能也会使用LINQ/IEnumerable而不是数组.