c# - VB 与 C# — CType 与 ChangeType

标签 c# .net vb.net

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

Dim ClipboardStream As New StreamReader(
    CType(ClipboardData.GetData(DataFormats.CommaSeparatedValue), Stream))

但这会在 C# 中引发错误:

Stream is a Type, which is not valid in the current context

ClipboardStream = new StreamReader(Convert.ChangeType(
    ClipboardData.GetData(DataFormats.CommaSeparatedValue), Stream));

老实说,我并不是 100% 了解类型转换,我只在代码片段中使用过它们,现在我正在尝试将简单的 VB 代码片段转换为 C# 版本...

最佳答案

ChangeType 接受一个 Type 作为第二个参数,所以你应该写成 typeof(Stream)typeof(Stream) 评估为表示类型 StreamType 实例。仅在那里使用 Stream 是行不通的,因为它不会计算出一个值。这不是一个表达式。

无论如何,你不应该在这里使用ChangeType,你应该cast,这是C# equivalent CType:

 ClipboardStream = new StreamReader((Stream)ClipboardData.GetData(DataFormats.CommaSeparatedValue));

关于c# - VB 与 C# — CType 与 ChangeType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50112541/

相关文章:

c# - 如何确定命名空间位于哪个程序集中?

c# - Stanford CoreNLP 创建 edu.stanford.nlp.time.TimeExpressionExtractorImpl 时出错

c# - 如何检查泛型类型参数是否可为空?

.net - 类似于 .NET Framework 2.0 的 MEF(托管可扩展性框架)

.net - 将字符串解析为整数(无论 hell 还是高水位)

c# - 解析现有的 "complex"SQL 语句并转换为对自定义 API 调用的调用

c# - 为什么 SortedList 和 List 使用数组,为什么 LinkedList 用得不多?

c# - 由于挂起的数据库调用而取消线程

c# - 将 C# 语句体 lambda 转换为 VB

.net - 使用 ADO.net(OLEDB) 导入 UTF-8 CSV 文件