c# - 动态创建和删除对象

标签 c# wpf object collections

我正在编写一种图像处理程序,允许用户打开任意数量的图像。每次用户打开图像时,程序都必须为其创建一个对象,该对象由某个类 MyClass 定义。 显然,当我在“打开图像”的方法中创建此对象时(例如单击菜单按钮"file"->“打开...”),该对象仅在此方法中已知,并且对 UI 的其他方法毫无用处。我可以在 UI 类中创建一个数组,然后将对象分配给 MyClass[i] 并继续计算 i,但这不是一个选项,因为我不知道用户想要打开多少图像。此外,用户必须能够再次关闭图像,这意味着该索引将毫无用处。

有没有办法以某种方式拥有一个可以动态添加和删除对象的对象集合?这些对象必须能够通过说出文件名来在此集合中标识自己。

我对 C# 很陌生,所以请尝试尽可能详细地解释所有内容。

最佳答案

您需要的是像列表这样的动态数据结构。

您可以使用通用(即列表)或非通用(即列表)版本。使用列表,您可以动态添加或插入项目、确定其索引并根据需要删除项目。

当您使用列表操作时,列表的大小会动态增长/缩小。

假设您的图像表示为 Image 类型的对象,那么您可以使用这样的列表:

// instantiation of an empty list
List<Image> list = new List<Image>();

// create ten images and add them to the list (append at the end of the list at each iteration)
for (int i = 0; i <= 9; i++) {

    Image img = new Image();
    list.Add(img);
}

// remove every second image from the list starting at the beginning
for (int i = 0; i <= 9; i += 2) {

    list.RemoveAt(i);
}

// insert a new image at the first position in the list
Image img1 = new Image();
list.Insert(0, img1);

// insert a new image at the first position in the list
IMage img2 = new Image();
list.Insert(0, img2);

使用字典的替代方法:

Dictionary<string, Image> dict = new Dictionary<string, Image>();

for (int i = 0; i <= 9; i++) {

    Image img = new Image();

    // suppose img.Name is an unique identifier then it is used as the images keys
    // in this dictionary. You create a direct unique mapping between the images name
    // and the image itself.
    dict.Add(img.Name, img);
}

// that's how you would use the unique image identifier to refer to an image
Image img1 = dict["Image1"];
Image img2 = dict["Image2"];
Image img3 = dict["Image3"];

关于c# - 动态创建和删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254194/

相关文章:

arrays - 创建一个包含可在 PowerShell 中动态增长的不同对象数组的对象

javascript - 在javascript中访问扩展对象

c# - 在 C# 中为类实现 == 运算符的最佳做法是什么?

wpf - 具有正确样式和图标的动态菜单

javascript - 为什么 forEach() 在此对象循环中不起作用?

c# - 仅当调用Application.Run()WPF应用程序时,代码才会启动

c# - 无法从 Iesi.Collections.Generic ISet<T> 中删除项目

c# - 何时使用 this.method()?

c# - C# 根据列将DataTable拆分为多个DataTable

c# - Entity Framework 代码优先,不生成数据库