在 c# 类型上切换大小写[重复]

2023-11-23

可能的重复:
C# - 是否有比“打开类型”更好的替代方案?

你好,假设我在类类型上有一个很大的 if/else。有没有办法用开关盒来做到这一点?

例子 :

function test(object obj)
{
if(obj is WebControl)
{

}else if(obj is TextBox)
{

}
else if(obj is ComboBox)
{

}

etc ...

我想创建类似的东西

switch(obj)
{
case is TextBox:
break;
case is ComboBox:
break;

}

}


更新C#7

Yes: Source

switch(shape)
{
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("<unknown shape>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}

C# 7 之前的版本

No.

http://blogs.msdn.com/b/peterhal/archive/2005/07/05/435760.aspx

今天我们收到了很多关于添加 C# 语言的请求 我将讨论其中一种更常见的问题 - 切换类型。 切换类型看起来是一个非常有用且简单的功能: 添加一个类似开关的结构,用于切换类型 表达式,而不是值。这可能看起来像 这:

switch typeof(e) { 
        case int:    ... break; 
        case string: ... break; 
        case double: ... break; 
        default:     ... break; 
}

这种语句对于添加虚拟非常有用 方法,例如通过不相交的类型层次结构或类型进行调度 包含您不拥有的类型的层次结构。看到一个像这样的例子 这样,您可以很容易地得出结论,该功能将是 简单且有用。它甚至可能会让你思考“为什么不 那些 #*&%$ 懒惰的 C# 语言设计者只是让我的生活更轻松 添加这个简单、省时的语言功能?”

不幸的是,像许多“简单”语言功能一样,类型切换是 并不像乍看起来那么简单。当你看到时,麻烦就开始了 一个更重要但同样重要的例子如下:

class C {}
interface I {}
class D : C, I {}

switch typeof(e) {
case C: … break;
case I: … break;
default: … break;
}

Link: https://blogs.msdn.microsoft.com/peterhal/2005/07/05/many-questions-switch-on-type/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 c# 类型上切换大小写[重复] 的相关文章

  • 可选参数“必须是编译时常量”

    我有一个类分为两个部分文件 如下所示 public partial class PersonRepository BaseRepository
  • WPF - 按多列排序时使用自定义比较器

    我有一个 ListView GridView 我想按 2 列排序 因此如果第 1 列中有 2 个以上的项目具有相同的值 它将按第 2 列排序 非常简单 但是在对 A Z 进行排序时 空字符串会出现在顶部 我想把它们移到底部 我制作了一个比较
  • 如何检查 .NET 4.0 中的泛型参数是否是动态的

    我有课ObjectMapper
  • 隐形打开的弹出窗口

    第二天就解决这个问题 要重现 请创建新的 WPF 应用程序 xaml
  • TestMethod:异步任务 TestSth() 不适用于 .NET 4.0

    我正在尝试使用 NET 4 0 BCL Async 和 MsTest 运行异步测试方法 看来这个设置不能处理 测试方法 异步Task测试Sth 由于测试用例资源管理器中缺少条目 将签名更改为异步后void 我可以运行测试用例 但结果错误 根
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • ASP MVC 5 - 403 customError 不起作用

    我正在尝试为我的应用程序创建自定义错误页面 它在大部分情况下都有效 但不适用于403 errors 我的网络配置
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 在 C# 中生成随机值

    如何使用以下命令生成随机 Int64 和 UInt64 值RandomC 中的类 这应该可以解决问题 这是一个扩展方法 因此您可以像调用普通方法一样调用它Next or NextDouble上的方法Random目的 public stati
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • .NET 的 HttpWebResponse 是否会自动解压缩 GZiped 和 Deflated 响应?

    我正在尝试执行一个接受压缩响应的请求 var request HttpWebRequest HttpWebRequest Create requestUri request Headers Add HttpRequestHeader Acc
  • C# - 命名空间内的类型声明

    在命名空间内而不是在类中声明类型的可能用途是什么 For ex namespace Test public delegate void Ispossible 这是有效的并且不会产生任何编译错误 但我无法想象为什么我们会以这种方式声明它而不是
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • Visual Studio 2015默认附加库

    当我在 VS 2015 中创建一个空项目时 它会自动将这些库放入 附加依赖项 中 kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib advapi32 lib shell3
  • 单个返回语句与多个返回语句? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route

随机推荐

  • 从两个不同位置安装 ClickOnce 应用程序

    我有一个在 NET Framework 3 5 Service pack 1 中使用 C 开发的 Windows 窗体应用程序 该应用程序可以基于开发数据库以及生产数据库进行发布 我正在使用 MSBuild 社区任务来发布我的应用程序 将应
  • .NET Winforms 应用程序是否有自动升级的标准方法?

    如果您有一个安装在大量机器上的Winforms应用程序 是否有实现自动升级功能的标准方法 例如每次启动时 它都会检查网站或网络服务 如果有可用的新版本 它就会下载并安装它 我可以弄清楚如何推出我自己的版本 但我想知道是否已经有任何框架可以帮
  • Android - 如何从微调器中获取所选项目值并将其放入字符串中?

    我在这个帖子上读到了很多类似的问题 但没有一个对我有帮助 这是我的代码 Override protected void onCreate Bundle savedInstanceState super onCreate savedInsta
  • 使用 R 中的 dplyr 查找一列字符串位于另一列中的行

    希望拉回其中一列中的值作为字符串存在于另一列 同一行内 中的行 我有一个 df A lt c cat dog boy B lt c cat in the cradle meet the parents boy mmets world df
  • 如何投影字段是否存在

    如果我有类似结构的文档如下 我正在用计算结果更新它们 我想知道结果是否已经插入到文档中 假设我对每个文档运行计算 c 和计算 d 现在我想显示所有文档的表格并显示计算 d 是否已经执行 对于这个表 我不关心计算 c id 1 a 1 res
  • 强制 JSON.NET 在序列化 DateTime 时包含毫秒(即使 ms 分量为零)

    我使用 JSON NET 直接从对象实例序列化 DateTime 值 不使用带有格式化程序的 DateTime ToString 有没有办法强制 JSON NET 在序列化中包含毫秒 即使 DateTime 的毫秒部分为零 背景 我的这个
  • 用常量列向量替换矩阵中的特定列

    对于神经网络 我想表示一个列向量y 1 2 3 在这样的矩阵中 y 1 0 0 0 1 0 0 0 1 我的矢量y非常大 因此不能选择硬编码 另外 我想避免使用for loops 到目前为止我做了什么 y1 y zeros 1 length
  • 如果您递增一个等于 STL 容器的结束迭代器的迭代器,会发生什么

    如果当迭代器指向向量的最后一个元素时将其增加 2 会怎样 在这个问题询问如何通过 2 个元素将迭代器调整为 STL 容器 提供了两种不同的方法 使用算术运算符 2 或 两次 或使用 std advance 我已经使用 VC 7 对它们进行了
  • Android 应用程序锁定相机

    是否可以获取当前在 Android 设备上锁定相机的应用程序 进程的 Android 应用程序 进程 ID 或包名称或其他 使用以下命令很容易查看它是否已锁定Camera open 但我想找出有它的过程 Thanks CameraServi
  • 如何解决 sqlite 和 c# 中的“'”问题?

    我正在使用 Sqlite 使用 Microsoft Visual C 2008 Express 我知道我的文本中的撇号 在查询中存在问题 我的问题是我认为我可以用 替换它 它似乎不起作用 这是我的代码的简化示例 string myStrin
  • 如何安全地访问 Django 模型中的请求对象

    我正在尝试做的事情 我正在尝试访问我的 django 模型中的请求对象 以便我可以使用以下命令获取当前登录的用户request user 我尝试过的 我发现了一个黑客this地点 但评论中有人指出在生产时不要这样做 我还尝试覆盖模型的 in
  • 计算预测值时发出警告

    使用数据框 x Date Val 1 1 2012 7 2 1 2012 9 3 1 2012 20 4 1 2012 24 5 1 2012 50 a lt seq as Date tail x 1 Date by month lengt
  • 序列化 Jackson JSON 树模型时排除 NullNode

    我有一个 pojo 类型 在序列化时需要将特定数值设置为特殊字符串 这些值将始终为空 可能非常深入层次结构 为了实现这一点 我首先将 pojo 转换为带有完整 null 的 JsonNode 以保留属性顺序 然后我沿着结构中的路径设置一些字
  • 验证动态添加的控件

    如何将动态添加的控件添加到验证中 div class editor field Html EditorFor model gt model Middlename div div div
  • 从 Chrome 控制台使用 Tampermonkey API?

    有什么办法使用篡改猴的 API在 Chrome 的 JavaScript 控制台中 我想搞乱像这样的功能GM xmlhttpRequest and GM listValues 创建以下脚本 UserScript name Exports s
  • Polymer:手动提交表单

    在聚合物中 我正在尝试手动提交表单 我的表格如下所示
  • 获取两个多边形相交区域的坐标(Python)

    假设我有两个多边形 它们的名称和坐标是 在 Python 中 p 1 1 2 2 4 2 3 1 q 1 5 2 3 5 5 4 3 5 1 在我们人脑中 很容易知道这两个多边形相交并计算相交区域坐标 但我想让我们的机器知道如何计算相交区域
  • 在 Unity 中显示实时摄像头源

    我有一个关于 Unity 的问题 我希望这个问题之前没有得到回答 我想将相机 如高清摄像头 连接到我的计算机 并且视频源应显示在我的 Unity 场景中 可以将其想象为虚拟电视屏幕 实时显示摄像机所看到的内容 我怎样才能做到这一点 谷歌没有
  • Facebook XMPP 聊天 API 发送消息 PHP

    我目前正在研究 Facebook Chat API 我想通过应用程序向我的 Facebook 联系人发送聊天消息 使用 facebook 提供的示例 我能够连接到 facebook 聊天服务器 但这更多的是一种反复试验的事情 我只能模糊地理
  • 在 c# 类型上切换大小写[重复]

    这个问题在这里已经有答案了 可能的重复 C 是否有比 打开类型 更好的替代方案 你好 假设我在类类型上有一个很大的 if else 有没有办法用开关盒来做到这一点 例子 function test object obj if obj is