【问题标题】:Need explanation why Clipboard.SetText("") is not equal to Clipboard.Clear()需要解释为什么 Clipboard.SetText("") 不等于 Clipboard.Clear()
【发布时间】:2017-01-16 00:45:40
【问题描述】:

我路过一篇关于 Microsoft 的 Clipboard.SetText() 方法的文章:Clipboard.SetText Method (String)

而且我意识到如果字符串为空(“”),它会抛出异常。

为什么会这样?为什么不等于Clipboard.clear()呢?

我只是好奇。

【问题讨论】:

  • “剪贴板中什么都没有”和“剪贴板上有一个空字符串”当然是有区别的。就像 String.Empty 与 null 不同。
  • 这个问题没有明确的答案,这是一个设计选择
  • 剪贴板格式有多种:文本、位图等。因此,SetText("") 将剪贴板格式设置为文本,将值设置为空字符串。清除使剪贴板格式未定义。
  • @HansPassant,那么如何将剪贴板设置为包含空字符串呢? ;-)

标签: c# clipboard


【解决方案1】:

与许多方法一样,这将取决于实现。

在这种情况下,它的实施很差。如您的文档链接中所述,我个人认为在提供不是 null 的值时抛出 ArgumentNullException 是明智的。

但是,在剪贴板中存储一个空字符串是没有意义的,所以大概是为了阻止这种情况发生并让每个人的生活更轻松。

假设这是使用标准 Windows API 调用剪贴板,如果提供的值为 NULL,实际实现会导致不同的行为,这意味着当您“粘贴”或检索内容时将访问该值。

由于剪贴板可以根据剪贴板中指定的类型执行数据转换,理论上可能存在将空白字符串解释为 NULL 或反之亦然的问题。

这是推测,因为文档中没有任何详细信息。您必须对其进行测试才能看到会发生什么。一些有趣的信息可以在 SetClipboardData function (MSDN) 中找到。

【讨论】:

    【解决方案2】:

    例如,考虑getDataObjectnull 与保存空字符串的数据对象的不同行为。

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 1970-01-01
      • 2010-11-05
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多