3

ご挨拶、

System.IO.FileInfo オブジェクトのコレクションであるプロパティをクラスに含める必要があります。これを行う方法と、クラスのインスタンスにオブジェクトを追加および削除する方法がよくわかりません(他のコレクションと同様だと思います)。

さらに情報を追加する必要がある場合はお知らせください。

ありがとうございました

更新:これに間違った方法でアプローチしていますか? プロパティであるコレクションに追加することは悪い習慣であるというコメントを読みました。これが本当なら、良い習慣は何ですか?コレクションに保存する必要があるオブジェクトがたくさんあります。コレクションは、最終的なアクションが実行される前に追加および削除されます。これは正しいアプローチですか、何か不足していますか?

4

4 に答える 4

1
using System.Collections.ObjectModel;

public class Foo
 { private Collection<FileInfo> files = new Collection<FileInfo>();
   public Collection<FileInfo> Files { get { return files;} }
 }

//...
Foo f = new Foo();
f.Files.Add(file);
于 2008-10-04T02:42:44.630 に答える
1

File静的クラスです。だから、あなたが意味したと仮定しましょうFileInfo.

多くの方法があります。

  • プライベート フィールドを公開する
  • イテレータを使用する
  • ReadOnlyCollection<> を介してプライベート フィールドを公開する

例えば、

class Foo {
    public IEnumerable<FileInfo> LotsOfFile {
        get {
            for (int i=0; i < 100; i++) {
                yield return new FileInfo("C:\\" + i + ".txt");
            }
        }
    }
    private List<FileInfo> files = new List<FileInfo>();
    public List<FileInfo> MoreFiles {
        get {
            return files;
        }
    }
    public ReadOnlyCollection<FileInfo> MoreFilesReadOnly {
        get {
            return files.AsReadOnly();
        }
    }

}

このコードを使用すると、プロパティに簡単に追加できますMoreFiles

Foo f = new Foo();
f.MoreFiles.Add(new FileInfo("foo.txt"));
f.MoreFiles.Add(new FileInfo("BAR.txt"));
f.MoreFiles.Add(new FileInfo("baz.txt"));
Console.WriteLine(f.MoreFiles.Count);
于 2008-10-04T02:08:33.543 に答える
0

リストまたは辞書にするだけです。両方見せます。

class Example
{
    public List<FileInfo> FileList { get; set; }
    public Dictionary<string, FileInfo> Files { get; set; }

    public Example()
    {
        FileList = new List<FileInfo>();
        Files = new Dictionary<string, FileInfo>();
    }

}

このプロパティを、実際の List オブジェクトまたは Dictionary オブジェクトであるかのように使用します。

var obj = new Example();
obj.FileList.Add(new FileInfo("file.txt")); // List<>
obj.Files.Add("file.txt", new FileInfo("file.txt")); // Dictionary<>
// also
obj.Files["file2.txt"] = new FileInfo("file2.txt"); // Dictionary<>

// fetch 
var myListedFile = obj.FileList[0]; // List<>
var myFile = obj.Files["file.txt"]; // Dictionary<>

私は辞書のアプローチを好みます。

プロパティはパブリック セットであるため、リストまたは辞書全体を置き換えることもできます。

obj.Files = new Dictionary<string, FileInfo>();
// or
var otherFiles = new Dictionary<string, FileInfo>();
otherFiles["otherfile.txt"] = new FileInfo("otherfile.txt");
obj.Files = otherFiles;

プロパティをプライベート セットにした場合でも、Add() を呼び出すことはできますが、リストまたは辞書自体を再割り当てすることはできません。

于 2008-10-04T02:49:56.910 に答える
0

これを行う簡単な方法の 1 つは、そのようなプロパティを作成することです (VB.Net には申し訳ありません)。

Public ReadOnly Property Files As Generic.List(Of IO.File)
    GET
        Return _Files
    END GET
END Property

_Files は、ファイルのリストを保持する Generic.List(Of IO.File) 型のプライベート クラス変数です。これにより、List データ型の関数を呼び出してファイルを追加および削除できます。一部の人々は、これは悪い習慣であり、コレクション自体を公開するべきではなく、代わりに必要なすべての関数を個別のパラメーターとして再コーディングするべきであり、基本的にはプライベート コレクションから適切な関数を呼び出すだけであると言うでしょう。

于 2008-10-04T02:12:08.247 に答える