我有一个 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/