【问题标题】:Compare typeof class比较 typeof 类
【发布时间】:2014-01-14 12:12:11
【问题描述】:

我有一个问题:

Control controlToGetFocus = this;
if (this.Parent.GetType() == typeof(...))

我无法从这里访问该类,因为它们来自不同的项目并且应该是分开的。

有什么方法可以做到这一点,也许还有其他方法?我确实尝试过this.Parent.Name,效果很好,但我的眼睛不喜欢那个解决方案;)

【问题讨论】:

  • 也许你可以检查一些常见的,项目之间共享的接口?

标签: c# .net typeof


【解决方案1】:

如果您需要检查“this.Parent”是否为特定实现,则应使用接口而不是特定类型。正如您所说,您的项目应该是分开的。但是项目共享通用接口是完全可以的。

给定这样的界面:

public interface IDoStuff { }

您可以检查 Parent 是否像这样实现它:

if (this.Parent is IDoStuff) { ... }

注意:这种方法当然要求您控制在“父”中找到的实例的实现。

NOTE2:澄清一下,公共接口必须放在两个项目都可以引用的单独项目/程序集中。

【讨论】:

  • "无法从这里访问该类,因为它们来自不同的项目并且应该是分开的。" 所以接口也将无法访问。
  • @realnero - 当然。但是这两个项目都可以访问包含此类共享接口的第三个公共项目。也就是说,您可以控制这里的所有项目吗?如果没有,您当然不能将接口添加到该实现中,我的建议对您不起作用。
  • 后来没有添加注释吗? :)
  • 向 OP 询问这件事,他知道他是否有控制权。为什么你删除了你的评论?
  • @realnero - 呵呵,刚刚意识到我把你弄糊涂了。对不起:)
【解决方案2】:

你可以使用

if (this.Parent.GetType().ToString() == "YOURTYPE")

更新:

您可以使用需要共享的类型创建一个 Common 项目,并从任何其他项目中引用此项目。然后以下将起作用:

if (this.Parent is YOURINTERFACETYPE)

假设 Parent 对象实现了 YOURINTERFACETYPE

【讨论】:

  • 在我看来不是一个好的建议,重构或混淆可能会破坏它
  • 这不是推荐的解决方案,但这对作者有用。否则他需要一个单独的 Common 项目来引用。
  • 认为这是目前最好的解决方案。谢谢!
  • @user2605871 很好,但从长远来看,我添加的更新看起来更好。不要忘记标记答案:)
  • @user2605871 - 您是否在控制“父”对象的实现?如果没有,接口方法是不行的。
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2018-03-31
  • 2012-07-19
  • 2021-09-26
  • 2017-05-27
  • 1970-01-01
相关资源
最近更新 更多