C# 铸字
我有一些类型,我想在运行时强制转换这些类型 例如,我想做:C# 铸字,c#,dynamic,casting,C#,Dynamic,Casting,我有一些类型,我想在运行时强制转换这些类型 例如,我想做: var customers = GetCustomers() as someType[] 如何执行此操作?as运算符尝试将对象强制转换为特定类型,如果失败,则返回null 例如: StringBuilder b=作为StringBuilder的某个对象; 如果(b!=null) 还涉及: cast操作符尝试将对象强制转换为特定类型,如果失败,则抛出一个exeption 例如: StringBuilder b=(StringBuild
var customers = GetCustomers() as someType[]
如何执行此操作?as运算符尝试将对象强制转换为特定类型,如果失败,则返回null 例如: StringBuilder b=作为StringBuilder的某个对象; 如果(b!=null) 还涉及: cast操作符尝试将对象强制转换为特定类型,如果失败,则抛出一个exeption 例如: StringBuilder b=(StringBuilder)someObject
请参阅此链接:as运算符尝试将对象强制转换为特定类型,如果失败,则返回null 例如: StringBuilder b=作为StringBuilder的某个对象; 如果(b!=null) 还涉及: cast操作符尝试将对象强制转换为特定类型,如果失败,则抛出一个exeption 例如: StringBuilder b=(StringBuilder)someObject
请参阅此链接:您不能使用
as
来强制转换运行时已知的类型:表达式在编译时将无效,因为您必须使用typeof(T)
,它不能与as
一起使用
不过,您可以使用的是System.Convert.ChangeType(对象,类型)
。在这里,第二个参数可以使用typeof(T)
,并与控制语句相结合,您可以在运行时将输入转换为正确的类型
不过,您应该问问自己,这是否是您想要的:只有在运行时才知道的类型将使您没有什么用处
您不能使用
as
来强制转换运行时已知的类型:表达式在编译时将无效,因为您必须使用typeof(T)
,它不能与as
一起使用
不过,您可以使用的是System.Convert.ChangeType(对象,类型)
。在这里,第二个参数可以使用typeof(T)
,并与控制语句相结合,您可以在运行时将输入转换为正确的类型
不过,您应该问问自己,这是否是您想要的:只有在运行时才知道的类型将使您没有什么用处
我认为某种类型是在运行时确定的?即使你能找到办法,这似乎是个坏主意。你怎么知道以后使用它是什么类型的?如果你能说出你要解决的问题,最好回答一下。在使用反射从数据库设置属性时也有同样的问题。我知道物业的名称,但不知道它的类型。我知道DB列的名称,但不知道它的类型。好问题。(回答很好。)我认为某种类型是在运行时确定的?即使你能找到办法,这似乎是个坏主意。你怎么知道以后使用它是什么类型的?如果你能说出你要解决的问题,最好回答一下。在使用反射从数据库设置属性时也有同样的问题。我知道物业的名称,但不知道它的类型。我知道DB列的名称,但不知道它的类型。好问题。(回答很好。)as运算符的解释很好,但我认为这并不能回答对运行时确定的类型进行强制转换的问题(这当然是不允许的)@BradleyDotNET在as的帮助下,你可以在运行时强制转换对象,但如果你想使用运行时类型,你可以使用“Dynamic”。dynamic是一种新的静态类型,它的作用类似于运行时才知道的类型的占位符。这是对as运算符的一个很好的解释,但我认为这并不能解决对运行时确定的类型进行强制转换的问题(这当然是不允许的)@BradleyDotNET在as的帮助下,您可以在运行时强制转换对象,但如果您想使用运行时类型,可以使用“动态”。dynamic是一种新的静态类型,其作用类似于在运行时之前未知类型的占位符。