【问题标题】:Can I use a ternary operator to set a generic method parameter?我可以使用三元运算符来设置泛型方法参数吗?
【发布时间】:2015-09-14 18:41:32
【问题描述】:

我有一个非常有用的实用方法,它接受任何对象类型并将其序列化为 XML 对象。方法参数被定义为这样的泛型

public static string Serialize<T>(T value)

我通常会在记录此方法之前向它发送 Web 服务器请求或响应,到目前为止,这对我来说在所有情况下都运行良好。但是现在我有一段代码,我可以在其中使用两个请求对象之一,所以我想像这样调用 Serialize 方法

Utility.Serialize((addressRequest != null)?addressRequest:billingSiteIDHouseNumberRequest)

但我不断收到一条错误消息,指出这些类型不兼容。

我也觉得??运算符应该可以工作,但是它也给了我一个错误。

感谢您的任何解释。

【问题讨论】:

  • 两个对象的类型是什么?让三元算子工作应该是一样的
  • 或从第二个操作数转换为第三个,反之亦然。
  • 假设这些是 2 种不同的对象类型,但派生自同一个类,您可能能够将两者都转换为父类型以使其工作。但是,将其扩展为 if/else 可能更清晰/可读。
  • 好点@JonSkeet
  • 对象类型不相关,不能从一种转换到另一种。也没有共同的父类。下面戴夫的回答是我应该编码的。

标签: c# generics ternary-operator


【解决方案1】:

假设您有不同的不相关类型,您需要将序列化位添加到三元逻辑中:

var result = addressRequest != null
    ? Utility.Serialize(addressRequest)
    : Utility.Serialize(billingSiteIDHouseNumberRequest);

【讨论】:

  • 取决于 Serialize 的确切用途,即使类型相关但不相同,也可能需要这样做。
  • 戴夫,这就是我应该开始编码的方式,感谢您的及时响应,是的,类型不相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
相关资源
最近更新 更多