【问题标题】:C# get => modify => set paradigm. how to shorter it into one line function call?C# 获取 => 修改 => 设置范例。如何将其缩短为一行函数调用?
【发布时间】:2012-07-17 12:26:46
【问题描述】:

所以我使用类似的东西:

...
var o = myclass.o; // o is a property and o is a structure not class
o.modifyInternalParameter(a, b, c); // a, b, c were created somewhere before
myclass.o = o; // as you can see o has getter and setter.
...

如何创建一个函数式包装器而不是调用 3 行代码调用一些

func(myclass.o, TypeOfO.modifyInternalParameter, {a, b, c}, returnValueIfmodifyInternalParameterHasOne);

?

【问题讨论】:

  • 这甚至不是有效的 C# 代码。
  • 内部对象是结构体,即按值语义吗?如果没有,您可以直接调用 yourclass.o.Modify(params) 来修改内部对象。如果是,那么您可以编写一个 yourclass.ModifyO(params) 在内部包装这三行。

标签: c# .net visual-studio .net-3.5


【解决方案1】:

我会让 modifyInternalParameter 返回自身或创建一个静态方法来为您执行此操作,然后您可以编写如下内容:

(返回自己,嗯,自己的副本,但修改后的副本)
myclass.o = myclass.o.modifyInternalParameter(a, b, c)

(静态)
myclass.o = ModifyInternalParameters(myclass.o, a, b, c)

所以你的内部方法可能如下所示:

public MyStruct modifyInternalParameter(object a, object b, object c)
{
    this.A = a;
    this.B = b;
    this.C = c;
    return this;
}

可以用静态版本做类似的事情。

编辑:您还可以在内部为您创建一个扩展方法(或myclass 上的方法):

myclass.ModifyInternalParametersOnO(a, b, c)

你可能有的地方:

public static void ModifyInternalParametersOnO(this MyClass myclass, object a, object b, object c)
{
    var o = myclass.o;
    o.modifyInternalParameters(a, b, c);
    myclass.o = o;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多