c# - 在运行时确定是否允许转换 (C#)

标签 c# reflection casting

我有一个 C# 包装类,其中包含一系列接受各种数据类型的方法:

public class MyClass
{
    public void ProcessString(string Value) { // implementation }
    public void ProcessInt(int? Value) { // implementation }\
    public void ProcessOther(MyClass Value) { // implementation }
}

我现在想添加一个通用的 ProcessObject() 方法来避免在调用相关过程方法之前显式转换对象的需要:

public void ProcessObject(object Value)
{
    if (CanCastToString(Value)
    {
        ProcessString((string)Value);
    }
    else if (CanCastToInt(Value))
    {
        ProcessInt((int?)Value);
    }
    // etc...
}

问题是我不知道我的 CanCastToInt 方法应该是什么 - 我需要这些方法能够健壮并处理诸如可空类型和其他用户定义的类型转换之类的事情。

我该怎么做?我只想知道给定对象是否可以转换为给定类型,即是否:

(SomeType)Value

会起作用。

最佳答案

通常有两种主要方式:

if (Value is SomeType)
{
    // Do something with a cast
}

var v = Value as SomeType;
if (v != null)
{
    // Value was successfully cast as SomeType
}

在使用结构或内部类型时,让它们可以为空:

var v = Value as int?;
if (v != null)
{
    ProcessInt(v.Value);
}

关于c# - 在运行时确定是否允许转换 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3098367/

相关文章:

java - 使用 JAVA 反射时出现 NoSuchMethodException

Python:有没有办法反射性地列出一个类的所有属性

.net - IKVM.Reflection.Emit 和 Mono.Cecil 的区别

C++ 类型转换 : benefit of using explicit casts?

java - 如何在父类(super class)中使用子类方法?

postgresql - 纠正 PostgreSQL 中的时间格式

C#:无法将类型为 'System.Int64' 的对象转换为类型 'System.Int32'

c# - 当其中一个开关打开时切换其他开关

c# - 无法从 Activator.CreateInstance 捕获异常

c# - 将属性注册为 DependencyProperty