C# 静态方法修改一个对象
C# Static method modifying an object
想象一下这样的事情...
public class Result
{
public string Name {get; set;}
public int Score {get; set;}
public bool Pass {get; set;}
}
还有一个静态方法...
public static Result SetPass(this Result result)
{
result.Pass = result.Score > 50;
return result;
}
我的问题是我必须 return 结果还是已经修改过?我可以使 return 类型无效,然后遍历结果集合并像这样修改......
foreach (var result in results)
{
result.SetPass();
}
或者我是否需要 return 结果对象并重新赋值?
因为Result
是一个class,它目前是在单个对象上修改的——基本上就地修改;这是按值传递 reference。因此,这里没有 return 值。
如果 Result
是 struct,您需要 return 一个新值,或使用(ref this Result result)
(使其通过引用传递一个值);请注意,编译器在这种情况下是宽松的,并允许在这种情况下隐式使用 ref
(ref
通常需要在调用方和被调用方都显式)。
想象一下这样的事情...
public class Result
{
public string Name {get; set;}
public int Score {get; set;}
public bool Pass {get; set;}
}
还有一个静态方法...
public static Result SetPass(this Result result)
{
result.Pass = result.Score > 50;
return result;
}
我的问题是我必须 return 结果还是已经修改过?我可以使 return 类型无效,然后遍历结果集合并像这样修改......
foreach (var result in results)
{
result.SetPass();
}
或者我是否需要 return 结果对象并重新赋值?
因为Result
是一个class,它目前是在单个对象上修改的——基本上就地修改;这是按值传递 reference。因此,这里没有 return 值。
如果 Result
是 struct,您需要 return 一个新值,或使用(ref this Result result)
(使其通过引用传递一个值);请注意,编译器在这种情况下是宽松的,并允许在这种情况下隐式使用 ref
(ref
通常需要在调用方和被调用方都显式)。