首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB vs C# - CType vs ChangeType

VB vs C# - CType vs ChangeType
EN

Stack Overflow用户
提问于 2018-05-01 07:00:34
回答 4查看 1.4K关注 0票数 13

为什么这在VB.Net中有效:

代码语言:javascript
复制
Dim ClipboardStream As New StreamReader(
    CType(ClipboardData.GetData(DataFormats.CommaSeparatedValue), Stream))

但这在C#中引发了一个错误:

流是一个类型,它在当前上下文中无效

代码语言:javascript
复制
ClipboardStream = new StreamReader(Convert.ChangeType(
    ClipboardData.GetData(DataFormats.CommaSeparatedValue), Stream));

老实说,我并没有百分之百地了解转换类型,我只在代码段中使用过它们,现在我试图将一个简单的VB代码片段转换成一个C#版本.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-01 07:09:23

ChangeType接受一个Type作为第二个参数,所以您应该编写typeof(Stream)typeof(Stream)计算结果为表示类型StreamType实例。仅仅使用Stream就不起作用,因为它不计算为值。这不是一个表达。

无论如何,您不应该在这里使用ChangeType,您应该进行转换,这是C# equivalent of CType

代码语言:javascript
复制
 ClipboardStream = new StreamReader((Stream)ClipboardData.GetData(DataFormats.CommaSeparatedValue));
票数 14
EN

Stack Overflow用户

发布于 2018-05-01 07:09:57

CType是VB.Net中的一个编译器函数。它允许它的第二个参数是生成类型名称的表达式。您不能自己编写这样的函数,无论是在VB还是C#中。

正如帕特里克所说,使用C#的Convert应该是:

代码语言:javascript
复制
ClipboardStream = new StreamReader(Convert.ChangeType(
ClipboardData.GetData(DataFormats.CommaSeparatedValue),typeof(Stream)));

但是,如果这是用VB编写的,则这段代码更接近于:

代码语言:javascript
复制
ClipboardStream = New StreamReader(Convert.ChangeType( _
ClipboardData.GetData(DataFormats.CommaSeparatedValue),GetType(Stream)))

VB中的CType更接近于C#中的强制转换(例如(Stream)...而不是CType(..., Stream))

票数 8
EN

Stack Overflow用户

发布于 2018-05-01 07:04:47

因为在C#中传递类型与在VB.NET中传递类型不同。

代码语言:javascript
复制
ClipboardStream = new StreamReader
                    ( Convert.ChangeType
                        ( ClipboardData.GetData(DataFormats.CommaSeparatedValue)
                        , typeof(Stream)
                        )
                    );

然而,在这种情况下,一个简单的演员会更好:

代码语言:javascript
复制
ClipboardStream = new StreamReader
                    ( (Stream)ClipboardData.GetData(DataFormats.CommaSeparatedValue)
                    );
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50112541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档