我有一行 C#:

cats.Add(new Cat("happy") { Mean=false})

我要修改 Cat 然后像这样应用平均值:
cats.Add(Fix(new Cat("happy")) { Mean=false})

但我不能。 Fix() 方法应该如何做才能使上述工作正常进行?

最佳答案

它不会那样工作。 new X() { } 是一个初始值设定项,您不能通过在构造函数周围调用 Fix 和结果上的属性/字段绑定(bind)来拆分它。在调用 Fix 函数之前必须评估属性/字段绑定(bind)。

你必须这样做:

public Cat Fix(Cat cat) { ... }

cats.Add(Fix(new Cat("happy") { Mean=false }));

或者像这样的扩展方法:
public static class CatExtensions {
     public static Cat Fix(this Cat cat) { ... }
}

cats.Add(new Cat("happy") { Mean=false }.Fix());

或者,如果您更喜欢冒险,则可以接受动态类型:
public Cat Fix(Cat cat, dynamic properties) { ... }

cats.Add(Fix(new Cat("happy"), new { Mean=false }));

// extension method:
public static class CatExtensions {
     public static Cat Fix(this Cat cat, dynamic properties) { ... }
}

cats.Add(new Cat("happy").Fix(new { Mean=false }));

或通用方法:
public Cat Fix<T>(Cat cat, T properties) { ... }

cats.Add(Fix(new Cat("happy"), new { Mean=false }));

// extension method:
public static class CatExtensions {
     public static Cat Fix<T>(this Cat cat, T properties) { ... }
}

cats.Add(new Cat("happy").Fix(new { Mean=false }));

关于c# - 在 c# 对象中启用流畅的设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17244466/

10-13 07:08