簡體   English   中英

擴展方法未分配值

[英]Extention method not assigning value

我對數據集有一個自定義排序方法。 我這樣稱呼它:

ds.Sort(“ column”);

ds是數據集類型。 然后,我對第一個表進行排序(排序代碼本身不相關,因為斷點表明結果正確)。 我的排序方法如下所示:

public static void Sort(this DataSet ds, string column)
{
    DataSet newDs = ds.Copy();

    //sorting occurs

    ds = newDs.Copy();
} // <- breakpoint

ds和newD都在斷點處對所有內容進行了應有的排序。 但是,一旦我繼續前進並在調用此sort方法后到達該行,ds將不再進行排序。 我也做了簡單的嘗試

ds.Clear(); 

在那個排序方法中,這次它起作用了。 我不允許為該對象分配值嗎? 是否可以通過某種方式做到這一點?

我不允許為該對象分配值嗎?

您沒有為對象分配值。 您正在為變量分配一個值...而該變量是一個參數。 在方法外部看不到對該參數值的更改,因為C#默認情況下使用值傳遞。 因此,例如,考慮以下代碼:

static void Foo(string input)
{
    input = "In Foo";
}
...
string text = "hello";
Foo(text);
Console.WriteLine(text); // Still prints "hello"

如果您不了解,請閱讀我有關參數傳遞的文章以獲取更多詳細信息。

您可能想要這樣的東西:

public static DataSet CopyAndSort(this DataSet ds, string column)
{
    DataSet newDs = ds.Copy();

    //sorting occurs
    return newDs; // No need to copy it *again*.
}

然后,您可以使用:

ds = ds.CopyAndSort("column");

和...之間的不同

ds.Clear();

ds = newDs.Copy();

是第一個操作對您通過引用ds傳入的DataSet對象進行操作,而第二個操作將新對象重新分配給該變量,從而使擴展方法無法訪問原始對象。

您可以將Merge方法用作后門,以使用排序后的數據填充原始數據集:

ds.Reset();
ds.Merge(newDs);

這將起作用,因為數據將被復制到原始DataSet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM