Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 铸字_C#_Dynamic_Casting - Fatal编程技术网

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是一种新的静态类型,其作用类似于在运行时之前未知类型的占位符。