C#程序設計初學者 - 幫助解決非常值得讚賞的基本問題。C#保持對超出範圍的方法所做的更改
我在應用程序中實現了一個通用接口的對象數量。我想創建一個方法,它將接受實現該接口的任何對象集合,對這些對象執行操作,並對原始集合進行轉換。
我看到的行爲是對象在外部調用代碼的方法的範圍內操作,而不是在那裏和呼叫後。我無法弄清楚如何解決這個問題。
這是我一直在測試這個代碼的簡化版本。
接口如下:
public interface IDated
{
DateTime? Date { get; set; }
}
實現該接口的對象的一個例子:
public class MyObject : IDated
{
public string Name { get; set; }
public DateTime? Date { get; set; }
}
改變的對象的方法:
public class Operator
{
public void Operate(IEnumerable<IDated> objects)
{
objects = from o in objects where o.Date.HasValue select o;
}
}
調用代碼,在最後沒有發生變化:
static void Main(string[] args)
{
var one = new MyObject("One", null);
var two = new MyObject("Two", DateTime.Parse("30-06-06"));
var list = new List<MyObject>();
list.Add(one);
list.Add(two);
new Operator().Operate(list);
Console.WriteLine(String.Format("Objects in list = {0}\r\nOperation Succeeded: {1}", list.Count.ToString(), (list.Count == 1).ToString()));
}
輸出爲「2」和「False」。谷歌搜索這個問題,我已經嘗試通過在集合中的「裁判」的說法,如:
public void Operate(ref IEnumerable<IDated> objects)
{
objects = from o in objects where o.Date.HasValue select o;
}
和:
new Operator().Operate(ref list);
然而代碼的最後一位有着美麗的充滿活力紅色下劃線,它認爲這個論點是無效的。我無法看到爲什麼?
再次,任何幫助非常感謝。
乾杯,
Tim。
你的'Operate'函數實際上應該*返回*你的新列表。這是獲得新的列表返回到您的通話功能的唯一途徑。 – Gabe
,那麼你有一個List,但你需要一個列表。因此,你如何在輸出上進行投票?我已經試過這一點,但無法獲得鑄件... –
Hanshan
你可以叫你的使用stataments投()上了IEnumerable 如果你有System.Linq的 –
TheEvilPenguin