【问题标题】:How to cast type you dont have access to?如何转换您无权访问的类型?
【发布时间】:2017-04-13 05:37:59
【问题描述】:

我有一个方法,它接受一个字符串作为参数。 当我发送 JToken 时,我得到了转换错误。 当然,我可以使用 JToken.ToString(),但如果我有很多 JToken,就很难处理所有这些。 考虑到我无权访问 JToken 或字符串类更改,是否可以创建从 JToken 到字符串的隐式类型转换(例如)?

【问题讨论】:

  • 你能提供你试过的代码吗?
  • 哦,如果 C# 中没有任何变化,答案是“否”:stackoverflow.com/questions/5526601/…
  • @ManpritSinghSahota,我真的不认为这很重要。关键信息很明显:“有可能在类之外创建类型转换吗?”
  • 如果你真的不想到处串,为什么不让它接受一个对象或者在这个方法中做一个接受对象和tostring的重载。我知道这是一种糟糕的做法,但它适用于你的情况。
  • @JoelHarkes,你是对的。只是想知道是否有更好的方法:)

标签: c#


【解决方案1】:

总结一下大家一直在说的话:不,这是不可能的。

只有拥有以下类之一时才能进行隐式类型转换:Can I add an implicit conversion for two classes which I don't directly control?

(在我看来)解决这个问题的最好方法是使用接受 JToken 而不是 string 和 tostring() 的扩展方法:

public static class MyExtensionMethodWrap 
{
     public static void AcceptJtoken(this ClassYouWantToExtend self, JToken token)
     {
         self.AcceptJtoken(token.ToString());
     }
}

这样您就不会在ClassYouWantToExtend 上创建一个无用且令人困惑的方法,但您确实有可能自己直接注入 JToken。

加法

您可以将扩展方法/类设为内部,因此此方法仅在您的单个项目中可用。 (通过展示此方法,不会在其他任何地方造成混乱)

【讨论】:

    猜你喜欢
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多