【问题标题】:Passing diferent parameters of diferent object based on if condition根据if条件传递不同对象的不同参数
【发布时间】:2017-07-28 00:34:49
【问题描述】:

我知道标题不是最好的描述问题,但我在这里尽我所能。

所以基本上我正在使用 c# + asp + openxml,我有这样的东西:

  anchor.Append(
      new DW.HorizontalPosition(
                new DW.PositionOffset(MathOpenXml.centimetersToEMU(1.1).ToString())
                new DW.HorizontalAlignment(haPosition)
            )
            {
                RelativeFrom =
                  DW.HorizontalRelativePositionValues.Margin
            }
        );

horizo​​ntalPosition 对象只能接收 1 个对象,但它们有不同的类型,我的主要问题是我无法在其中执行 if 语句,我需要先检查,例如 if offset != null,如果是如果不传递其他对象,则将偏移量作为参数传递。

我不知道如何存档,有帮助吗?

【问题讨论】:

  • 你的问题不是很清楚。当您说 1) Horizo​​ntalPosition 可以接收一个对象时,您是在说它的构造函数只能接收一个对象吗?和 2)“我不能在里面做一个 if 语句”,你所说的“那里”是什么意思?
  • 好的,你说得对,我的意思是构造函数是的,它只能接收 1 个对象或 PositionOFFset 或水平对齐
  • 2) 我的意思是在构造函数内部,如果可以的话,我可以说好的,如果不放置水平对齐,则将偏移量放在那里
  • 这段代码还能编译吗? new DW.HorizontalPosition好像有2个参数,但是缺少分隔符逗号。不编译的代码很难看懂。
  • @OlivierJacot-Descombes 很难确定,但我认为这两个是 OP 试图根据条件分别传递给构造函数的不同对象。在这种情况下,OP 真的应该阅读三元运算符。

标签: c# asp.net asp.net-web-api


【解决方案1】:

HorizontalPosition 类具有重载的构造函数,即具有不同参数列表的多个构造函数。由于重载决议发生在编译时,你不能在运行时传递不同类型的参数。

你需要有 2 个单独的调用,每个调用一个不同的构造函数重载

anchor.Append(
    condition
        ? new DW.HorizontalPosition(
              new DW.PositionOffset(MathOpenXml.centimetersToEMU(1.1).ToString())
          ) { RelativeFrom = DW.HorizontalRelativePositionValues.Margin }
        : new DW.HorizontalPosition(
              new DW.HorizontalAlignment(haPosition)
          ) { RelativeFrom = DW.HorizontalRelativePositionValues.Margin }
);

【讨论】:

    【解决方案2】:

    为什么不为 Horizo​​ntalPosition 创建两个构造函数,第一个构造函数接受一个对象,第二个构造函数接受两个对象?

    或者你可以只有一个带有两个参数的构造函数,你可以把你的 if 条件放在构造函数块中。

    【讨论】:

    • 我打算提出完全相同的建议。 +1 有两个不错的选择。
    • 我无法构建构造函数,它是由 openXML 库预先定义的
    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多