public class Foo{
public string Prop1 {get;set;}
public string Prop2 {get;set;}
public Foo(Foo source) {
this.Prop1 = source.Prop1;
this.Prop2 = source.Prop2;
}
}
public class Main
{
private List<Foo> items = new List<Foo>();
public IEnumerable<Foo> GetItems() {
foreach (Foo foo in items) {
yield return new Foo(foo);
}
}
}
回答
這取決於你所說的安全。如果調用對象正要從foo讀取信息。相反的:
public IEnumerable<Foo> GetItems() {
foreach (Foo foo in items) {
yield return new Foo(foo);
}
爲什麼不只是做:
public IEnumerable<Foo> GetItems() {
foreach (Foo foo in items) {
yield return foo;
}
如果你正試圖阻止調用對象從修改原始FOO,你做了什麼工作。
您也可以將foo設置爲不可變,並且您不必擔心確保您正確複製所有屬性等。這樣,每次返回時都不必創建新對象通過調查員。
發表埃裏克利珀的不變性:
http://blogs.msdn.com/ericlippert/archive/2007/11/13/immutability-in-c-part-one-kinds-of-immutability.aspx
聲明:我知道Java的,但與C#
如果你是經驗非常少試圖創建一個副本列表,以便原始列表元素保持「不可變」,並且希望儘可能地將其作爲一般,也許您應該調查克隆,或者更確切地說, deep-copying
否則,只是創建Item foo的新實例並不一定會確保您有完美的初始化副本?
好吧,看起來很清楚你正在尋找一個不可變的迭代器。這有效,但並不完全有效。你可以嘗試讓你的類是這樣的:
public class Foo {
public string Prop1 { get; private set;}
public string Prop2 { get; private set;}
public Foo(string prop1, string prop2) {
this.Prop1 = prop1;
this.Prop2 = prop2;
}
}
這不完全是一成不變的,但對於大多數的意圖是。
不能修改Prop1,現在調用者有一個修改的Prop1而不知道它? – Kenoyer130 2010-04-21 15:27:31
@ user200295 - 字符串是不可變的。 – ChaosPandion 2010-04-21 15:55:29
如果該屬性是一個類或其他可變對象會怎麼樣? – Kenoyer130 2010-04-21 17:14:45
- 1. 這是訪問枚舉的安全方法嗎?
- 2. Java枚舉可以添加一個返回方法嗎?
- 3. 線程安全隊列是一個好方法嗎?
- 4. 枚舉DropDownList總是返回列表中的第一個值
- 5. 返回一個枚舉
- 6. C++:返回一個枚舉
- 7. Android Java:這是一個好方法,而不是枚舉?
- 8. 如何返回泛型枚舉的枚舉元素列表?
- 9. 在自己的每個方法中返回枚舉器
- 10. 在枚舉中枚舉是否有一個通用的方法?
- 11. 在Java中有序列化枚舉的好方法嗎?
- 12. 靜態方法返回枚舉在Java
- 13. 以線程安全的方式枚舉列表
- 14. 從靜態方法返回一個引用線程安全嗎?
- 15. 較好的是:一個枚舉或單
- 16. 枚舉時刪除Cookie:安全嗎?
- 17. C#枚舉類型安全嗎?
- 18. 返回一個空的(實體)列表或null是更好嗎?
- 19. 枚舉器無法返回第一個元素
- 20. 在枚舉擴展幫助中返回枚舉列表而不是字符串
- 21. DataReader - 返回一個可枚舉/可查詢比返回一個列表更有效嗎?
- 22. 如何爲返回類型爲枚舉的方法返回null?
- 23. 搜索在枚舉一個字符串,並返回枚舉
- 24. 這是從SQL注入返回DataTable安全的方法嗎?
- 25. C++函數返回一個枚舉?
- 26. 哈希表類中的方法需要返回枚舉類型
- 27. C#方法返回的3個可能的枚舉
- 28. Ruby如何實現枚舉器#下一個方法?
- 29. 留下一個空的界面是一個好的做法嗎?
- 30. 創建一個枚舉或枚舉等價物,返回字符串(枚舉返回int)在.NET中
你的意思是安全嗎? – ChaosPandion 2010-04-21 14:25:37