如何将接口转换为 C# 中的类型?

2024-01-06

我有一个返回接口的属性。在调试过程中,我可以中断返回的内容,虽然它是接口,但 Visual Studio 足够聪明,可以知道它实际上是什么派生类型。我认为它正在使用反射或其他东西。我不知道。我的问题是,我可以在运行时获得相同的信息,以便我可以创建适当类型的变量并将接口转换为该变量吗?这就是我要说的:

IPreDisplay preDisplay = cb.PreDisplay;

如果 preDisplay 是 RedPreDisplay 我希望能够编码

RedPreDisplay tmp = preDisplay as RedPreDisplay;

或者如果 preDisplay 是 GreenPreDisplay...

GreenPreDisplay tmp = preDisplay as GreenPreDisplay;

ETC... 如果可能的话,我想避免使用混乱的 switch 语句,如果我可以使用泛型,那就太好了。

如果您对我如何做到这一点有任何建议或示例,请分享。


当你遇到需要这样做的情况时,就意味着你做错了什么。您需要备份并弄清楚为什么您的设计要求您这样做。如果您发现自己陷入困境,我强烈建议您发布一个新问题来获得设计方面的帮助 - 这里有很多聪明的人可以提供帮助。

要直接回答你的问题,不 - 如果没有某种 if/else 或条件,你就无法做到这一点,因为你必须明确使用静态类型。您可以使用反射来调用该方法,但由于您似乎需要调用接口不支持的内容(但某些对象支持),因此您无论如何都需要编写每个静态类型的条件来调用该方法。只需直接编码类型即可。

Edit:根据评论中的讨论,最好的解决方案是向具有其他属性或方法的类添加第二个接口。然后你可以做一个简单的检查:

IPreDisplay display = cb.PreDisplay;
IOtherInterface displayAsOther = display as IOtherInterface;
if(displayAsOther != null)
{
    displayAsOther.OtherMethod();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将接口转换为 C# 中的类型? 的相关文章

  • C++ STL 映射,std::pair 作为键

    这就是我通过地图定义的方式 std map
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 为类型列表创建别名并将其作为模板参数传递

    我正在使用可变参数模板来实现访问者模式 template
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 以编程方式更新 Wifi 网络

    我正在尝试创建一个程序 当某个 wifi 网络在范围内时 该程序会连接到该网络 即使已经连接到另一个 wifi 也是如此 我在用着简单Wifi https github com DigiExam simplewifi 基本上效果很好 除了在
  • 使用c#在mac上启动外部进程

    我成功地使用 System Diagnostics Process Start 在 Windows 上启动我的外部单声道可执行文件 然而在mac上却失败了 我没有收到任何错误 只是什么也没发生 我尝试按以下方式进行操作 System Dia
  • R 包与 Rcpp 的链接错误:“未定义符号:LAPACKE_dgels”

    我正在创建一个 R 包 lapacker 以使用 R API 头文件 R ext Lapack h 为 R 提供和使用的内部 LAPACK 库 仅具有双精度和双复数 提供 C 接口 源代码 https github com ypan1988
  • 为什么 xcode IDE 认为 `friend` 是保留字

    我一直在开发一个个人项目 并在我创建的新类中包含以下代码 property readonly getter isFriend BOOL friend 它似乎没有任何问题 当我构建它时 它可以编译得很好 但是当我们在xcode IDE看起来像
  • 仅使用一个 #include 表达式一次包含多个头文件?

    是否有任何表达式可以使语法一次包含多个标头 而无需为每个新文件编写 include 表达式 例如 include
  • 我应该使用字节还是int?

    我记得曾在某处读到 即使您只需要字节 使用 Int32 更好 就性能而言 它 据说 仅适用于您不关心存储的情况 这是有效的吗 例如 我需要一个保存一周中某一天的变量 我是吗 int dayOfWeek or byte dayOfWeek E
  • .Net 支持柯里化泛型吗?

    假设我们有一个嵌套的泛型类 public class A
  • 如何在 C++11 中返回类成员向量

    我读了几篇关于如何从方法返回向量的文章 其中包括 c11 右值和移动语义混淆返回语句 https stackoverflow com questions 4986673 c11 rvalues and move semantics conf
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • Qt - 添加超链接到对话框

    有没有办法在 Qt 对话框中添加可点击的超链接 IE 它应该看起来像一个超链接 蓝色文本 当您单击它时 它应该在浏览器中打开该超链接 像这样的东西 Use QLabel setOpenExternalLinks bool 并在标签上设置文本
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 以编程方式阻止 Vista 桌面搜索 (WORDS) 对映射网络驱动器上的 pst 文件建立索引

    经过几天的多次尝试 我没有找到任何 100 的解决方案来解决这个问题 我的搜寻和调查范围 直接访问注册表 HKLM SOFTWARE Microsoft Windows Search CrawlScopeManager Windows Sy
  • 在 OSX 上检测 Objective C 或 C++ 中的文件夹访问(如 fs_usage 命令)

    我正在 OSX 上开发实时病毒扫描程序 OSX 的命令行命令fs usage可以通过以下方式确定文件夹访问权限 并且只能以 root 用户身份运行 fs usage w f pathname grep Users Documents Use
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • 在for循环中声明和初始化变量

    可以简单写一下吗 for int i 0 代替 int i for i 0 在 C 或 C 中 并且会变量i只能在循环内部访问 它在 C 中有效 它在 C 的原始版本中是不合法的 但在 C99 中被采用为 C 的一部分 当时一些 C 功能被
  • 获取线段上最接近另一个点的点[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想找到线段AB上最接近另一个点P的点 我的想法是 Get a1 and b1由直线公式y1 a1x b1 使用 A 点

随机推荐

  • 单击单选按钮清除下拉选择

    我有一组单选按钮 选择主要公司后 主要公司字段将被隐藏 我此时还想清除下拉选择 我怎样才能做到这一点 p p
  • Git 显示克隆后修改的随机文件;不能丢弃它们

    一旦我在 MacBook Pro 上克隆某个存储库 我就会立即看到该存储库中修改的文件 我尝试过 git pull git checkout git reset 似乎没有什么能让这些所谓的修改过的文件消失 我使用 git 一段时间了 以前从
  • Google 数据存储身份验证问题 - C#

    我正在尝试使用服务帐户凭据文件 我根据文档创建的 连接到我帐户上的 Google 数据存储 但在尝试插入实体时遇到身份验证错误 Grpc Core RpcException 状态 StatusCode 未验证 详细信息 元数据凭据插件中发生
  • Webservice C# 构造函数不允许参数?

    我试图创建一个 Web 服务 在其构造函数中采用一些参数来保存往返 但我不断收到错误 CS1729 servicename 不包含采用 1 参数的构造函数 尽管当我尝试在本地创建即时 在与服务相同的项目中 时 一切正常 什么给出了 网络服务
  • 使用 Google API - GClientGeocoder()

    我尝试关注此页面 http melandri net 2009 07 03 get location coordinates using google maps 但 GClientGeocoder 未定义 有错误 我已经在我的页面上使用了谷
  • 使用 Regex golang 查找所有匹配的字符串

    我试图返回一个数组或切片 其中包含特定正则表达式与字符串的所有匹配项 该字符串是 city state zip 我想返回一个数组 其中包含花括号之间的所有字符串匹配项 我尝试过使用regexp https golang org pkg re
  • jqgrid 列宽自动

    有没有办法让jqgrid的列宽根据该列的内容动态变化 我使用了shrinkToFit和autoWidth 但它们都不适合我 我使用jqgrid 4 5 2 我搜索并阅读了其他问题 但这些对我不起作用 也许有一个小部件可以做到这一点 如果你帮
  • 如何根据值更改输入滑块拇指颜色?

    我正在制作一个包含范围输入滑块的网站 我希望滑块拇指根据滑块的值改变颜色 例如 如果值为 0 则拇指颜色将为rgb 255 0 0 如果是 100 颜色将为rgb 0 255 0 拇指会变色 需要明确的是 我不想要这样的事情 if slid
  • 使用 html/css3 和 WebView 将图像缩放到屏幕...在图像加载之前出现白屏

    我正在 Android 中使用 WebView 来加载一些本地 html 将图像缩放到屏幕作为背景 但是 当我开始加载 WebView 的活动时 我在图像之前看到了非常短暂的白屏闪烁负载 这不是什么大不了的事 但我想避免这种情况 我尝试将所
  • Django:如何迁移运行时创建的动态模型

    在我的 Django 应用程序中 特定的用户输入将导致创建新模型 这是我用来创建模型并注册它的代码 model type model name ExistingModel attrs admin site register model ad
  • 如何让 Safari 发送 if-modified-since 标头?

    当我生成页面时 我发送标题 HTTP 1 1 200 OK Cache Control private Content Type text html charset utf 8 Last Modified Mon 04 Apr 2011 2
  • PHP 中的 JavaScript 函数 fromCharCode()

    var test String fromCharCode 112 108 97 105 110 document write test Output plain 有没有 PHP 代码可以用作String fromCharCode JavaS
  • CanCan::Ability current_user 方法在哪里定义?

    差不多就是我在标题中提到的内容 我在代码中使用 CanCan Ability 来检查权限和能力 它期望定义一个 current user 方法 我猜它来自 devise 但不确定 我希望覆盖它 最好的方法是什么 被发现了here https
  • JQuery:可以有 3 个输入的滑块吗?

    我想创建一个具有 3 个输入的滑块 我做了很多研究 但找不到比带有 2 个输入的滑块更多的东西 这是代码 http jqueryui com slider range http jqueryui com slider range 如何创建
  • pip - 使用项目文件夹作为安装源

    我想配置pip使用自定义搜索路径从本地文件夹安装包 该文件夹未托管在 PyPI 上 目标是能够运行 pip install user my non published package 并让它安装所述软件包 home myuser proje
  • JSTree 检查所选节点是否为叶子或仅叶子可选

    我创建了一个jstree如下 js tree jstree core data url pageContext request contextPath makeTree plugins types search data function
  • SAM 模板内的 IAM 角色

    如何在 SAM 模板中创建 IAM 角色 就像我在 SAM 包中所做的那样 我尝试了如下 lambdaFunctionRole Type AWS IAM Role Properties AssumeRolePolicyDocument Ve
  • 如何从父文档访问 iframe 内的元素?

    function contents nb name height 1 document getElementById contents iframe height height px 2 var currentIFrame contents
  • 有效 32 位有符号整数的正则表达式

    我很确定这个网站实际上还没有回答这个问题 一劳永逸地 匹配 32 位有符号整数范围内的数字字符串的最小正则表达式是什么 2147483648 to 2147483647 I must使用正则表达式进行验证 这是我可用的唯一选项 我努力了 d
  • 如何将接口转换为 C# 中的类型?

    我有一个返回接口的属性 在调试过程中 我可以中断返回的内容 虽然它是接口 但 Visual Studio 足够聪明 可以知道它实际上是什么派生类型 我认为它正在使用反射或其他东西 我不知道 我的问题是 我可以在运行时获得相同的信息 以便我可