And*_*ius 0 c# extension-methods variable-assignment
我有一个自定义排序方法的数据集.我称之为:
ds.Sort( "列");
其中ds是数据集类型.然后我排序第一个表(排序代码本身不相关,因为断点显示结果是正确的).我的排序方法如下:
public static void Sort(this DataSet ds, string column)
{
DataSet newDs = ds.Copy();
//sorting occurs
ds = newDs.Copy();
} // <- breakpoint
Run Code Online (Sandbox Code Playgroud)
在断点处,ds和newDs都按照应有的顺序进行排序.但是,一旦我向前移动并在调用此排序方法后到达该行,ds将不再排序.我也尝试过这样做
ds.Clear();
Run Code Online (Sandbox Code Playgroud)
在那个Sort方法中,这次它起作用了.我不允许为对象分配值吗?是否有可能以某种方式做到这一点?
我不允许为对象分配值吗?
您没有为对象分配值.您正在为变量赋值 ...并且该变量是一个参数.在该方法之外看不到对该参数值的更改,因为C#默认使用pass-by-value.例如,考虑以下代码:
static void Foo(string input)
{
input = "In Foo";
}
...
string text = "hello";
Foo(text);
Console.WriteLine(text); // Still prints "hello"
Run Code Online (Sandbox Code Playgroud)
如果您不明白,请阅读有关参数传递的文章以获取更多详细信息.
你可能想要这样的东西:
public static DataSet CopyAndSort(this DataSet ds, string column)
{
DataSet newDs = ds.Copy();
//sorting occurs
return newDs; // No need to copy it *again*.
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
ds = ds.CopyAndSort("column");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |