gpt4 book ai didi

c# - 如何正确返回列表项进行编辑?

转载 作者:行者123 更新时间:2023-12-05 04:21:50 27 4
gpt4 key购买 nike

我创建了一个类,用于方便地创建一个列表,该列表由具有单一界面的不同类型的对象组成。

列表项是通过调用类方法创建的,该方法的结果是列表中新创建的对象以进行编辑。

虽然此代码有效,但我不确定返回列表项以编辑属性是否安全?

如果没有,您如何才能安全地从列表中返回一个元素,以便您可以对其进行编辑。


var builder = new ElementBuilder();
var item = builder.AddText("abc");

// Edit new reference element property, should be stored in "builder" variable
item.Bold = true;

.....

// Pass builder instance with added items to other place

// If we do something like this with added values on above
var x = builder.First() as TextElement;
Console.WriteLine(x.Text);
Console.WriteLine(x.Bold);

// Should output:
abc
true
public class ElementBuilder
{

private List<IElement> elements = new List<IElement>();;

public TextElement AddText (string text)
{
var item = new TextElement (text);
elements.Add(item);
// RETURNING to edit properties, updates of returning should affect to list item
return _elements.First(x => x == item);
}

public ImageElement AddImage (string imageUrl)
{
var item = new ImageElement (imageUrl);
elements.Add(item);

// RETURNING to edit properties, updates of returning should affect to list item
return _elements.First(x => x == item);
}

public IElement First()
{
return elements.First();
}

.....
}

最佳答案

if it's safe to return a list item to edit properties?

是的,这是安全的,因为代码正在做的是返回对新创建项目的引用:

var item = new TextElement (text);

关于引用类型如何工作的帖子非常好:

此外,可以通过返回 item 来避免整个集合的迭代, 不使用 First()方法:

public IElement AddText (string text)
{
var item = new TextElement (text);
elements.Add(item);

return item;
}

因为当你Add项目进入集合,然后新创建的项目将被添加到列表的末尾。所以,First()方法将迭代整个 List<T>找到你的项目。 It can be seen in source codeFirst()方法。

关于c# - 如何正确返回列表项进行编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74147992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com