2ちゃんねる用ブラウザ「twintail」Part24

このエントリーをはてなブックマークに追加
742水玉
>>468

SettingConverter.cs:ArrayListConverter<T>:ConvertTo()において配列をコンマテキスト化
していて、そのため文字列中のコンマをEscape()を使って「\」を付加し、
読み込み時に「\」の先行しないコンマを区切りとして配列を復元しています。
が。付加した「\」を取り除いていないため「\」が無限増殖します。
さらに、配列内文字列(の最後の文字)が「\」だと区切り文字としてみなされなくなり
次の文字列と合体してしまいます。

  private string Escape( string s )
  {
    // NTwin23.103
    s = s.Replace( @"\" , @"\\" );  // まず「\」をエスケープしておいて
    s = s.Replace( "," , @"\," );   // 「,」(コンマ)をエスケープ

    //// コロンをエスケープしていく
    //int startIndex = 0 , token = -1;

    //while ( (token = s.IndexOf( ',' , startIndex )) >= 0 )
    //{
    //  s = s.Insert( token , "\\" );
    //  startIndex = token + 2;
    //}
    //// NTwin23.103

    return s;
  }
つづく
743水玉:2009/06/08(月) 23:24:06 ID:zkBnef8Z0
で、ConvertFrom()の
  //string[] array = Regex.Split(value.ToString(), @"(?<!\\),");   // NTwin23.103
  string[] array = Regex.Split(value.ToString(), @"(?<!(?<!\\)\\),"); // NTwin23.103

  foreach (string s in array)
  {
    if (typeof(T) == typeof(string))
    {
      // NTwin23.103
      string sr = s.Replace( @"\," , "," );
      sr = sr.Replace( @"\\" , @"\" );
      al.Add(sr);
      // NTwin23.103
    }
    else
      al.Add(converter.ConvertFromString(s));
  }

ところでてつとさん、コメントで「コロン」って書いてあって(?_?)でした。
コロンは「:」。grepしたらまだあちこちにあって・・・!
ArrayListConverter.cs:ArrayListConverter<T>??えええっ???
ってnamespaceがTwintail3!!わくわく。