为什么这在VB.Net中有效:
Dim ClipboardStream As New StreamReader(
CType(ClipboardData.GetData(DataFormats.CommaSeparatedValue), Stream))但这在C#中引发了一个错误:
流是一个类型,它在当前上下文中无效
ClipboardStream = new StreamReader(Convert.ChangeType(
ClipboardData.GetData(DataFormats.CommaSeparatedValue), Stream));老实说,我并没有百分之百地了解转换类型,我只在代码段中使用过它们,现在我试图将一个简单的VB代码片段转换成一个C#版本.
发布于 2018-05-01 07:09:23
ChangeType接受一个Type作为第二个参数,所以您应该编写typeof(Stream)。typeof(Stream)计算结果为表示类型Stream的Type实例。仅仅使用Stream就不起作用,因为它不计算为值。这不是一个表达。
无论如何,您不应该在这里使用ChangeType,您应该进行转换,这是C# equivalent of CType
ClipboardStream = new StreamReader((Stream)ClipboardData.GetData(DataFormats.CommaSeparatedValue));发布于 2018-05-01 07:09:57
CType是VB.Net中的一个编译器函数。它允许它的第二个参数是生成类型名称的表达式。您不能自己编写这样的函数,无论是在VB还是C#中。
正如帕特里克所说,使用C#的Convert应该是:
ClipboardStream = new StreamReader(Convert.ChangeType(
ClipboardData.GetData(DataFormats.CommaSeparatedValue),typeof(Stream)));但是,如果这是用VB编写的,则这段代码更接近于:
ClipboardStream = New StreamReader(Convert.ChangeType( _
ClipboardData.GetData(DataFormats.CommaSeparatedValue),GetType(Stream)))VB中的CType更接近于C#中的强制转换(例如(Stream)...而不是CType(..., Stream))
发布于 2018-05-01 07:04:47
因为在C#中传递类型与在VB.NET中传递类型不同。
ClipboardStream = new StreamReader
( Convert.ChangeType
( ClipboardData.GetData(DataFormats.CommaSeparatedValue)
, typeof(Stream)
)
);然而,在这种情况下,一个简单的演员会更好:
ClipboardStream = new StreamReader
( (Stream)ClipboardData.GetData(DataFormats.CommaSeparatedValue)
);https://stackoverflow.com/questions/50112541
复制相似问题