-1

テキスト ファイルの内容を取得し、文字列の行を削除し、テキスト ファイルに書き直して、文字列の行を削除しようとしています。StreamReader を使用してテキストを取得し、リストにインポートし、文字列を削除してから、StreamWriter を使用して書き換えています。私の問題は、文字列の削除または書き込みのどこかで発生します。削除されていない既存のコンテンツをテキスト ファイルに書き戻す代わりに、すべてのテキストが次のように置き換えられます。

System.Collections.Generic.List`1[System.String]

この関数の私のコードは次のとおりです。

{
            for (int i = deleteDevice.Count - 1; i >= 0; i--)
            {
                string split = "";
                //deleteDevice[i].Split(',').ToString();
                List<string> parts = split.Split(',').ToList();

                if (parts.Contains(deviceList.SelectedItem.ToString()))
                {

                    deleteDevice.Remove(i.ToString());
                }

            }
            if (deleteDevice.Count != 0) //Error Handling
            {

                writer.WriteLine(deleteDevice);

            }
        }

        deviceList.Items.Remove(deviceList.SelectedItem);
    }

スクリプトで、削除されていない文字列 (存在する場合) を置き換えずに書き戻したいと思います。どんな助けでも大歓迎です、乾杯

4

3 に答える 3

1

問題

deleteDeviceは typeList<string>であり、 もオーバーロードしないためToString()、 のデフォルトの動作はList<string>.ToString()型の名前を返すことです。

したがって、あなたの行は文字列1[System.String]`をwriter.WriteLine(deleteDevice);書き込みます。System.Collections.Generic.List

それ以外にも、コードには多くの問題があります...

たとえば、次のようにします。

string split = "";

その後、次の行で次のようにします。

List<string> parts = split.Split(',').ToList();

しかし、splitis "" であるため、これは常に空のリストを返します。


解決

コードを簡素化するために、指定された述語に一致するすべての行をファイルから削除するヘルパー メソッドを最初に記述できます。

public void RemoveUnwantedLines(string filename, Predicate<string> unwanted)
{
    var lines = File.ReadAllLines(filename);
    File.WriteAllLines(filename, lines.Where(line => !unwanted(line)));
}

次に、述語を次のように記述できます (これは正しくない可能性があります。コードがコンパイル可能でなく、いくつかの型が省略されているため、コードが何をしているのか正確にはわかりません)。

string filename = "My Filename";
string deviceToRemove= deviceList.SelectedItem.ToString();

Predicate<string> unwanted = line => 
    line.Split(new [] {','})
    .Contains(deviceToRemove);

RemoveUnwantedLines(filename, unwanted);
于 2013-10-24T08:28:46.497 に答える
1

問題は次の行にあります。

writer.WriteLine(deleteDevice);

あなたはdeleteDeviceを書いています(これはリスト型だと思います)。List.ToString() は、特定の実装がないため、リストの型名を返します。あなたが欲しいのは

foreach(String s in deleteDevice)
{
    writer.WriteLine(s);
}
于 2013-10-24T08:29:14.033 に答える