C# 比较C中的两个剪贴板IDataObject#

C# 比较C中的两个剪贴板IDataObject#,c#,winforms,clipboard,C#,Winforms,Clipboard,我正在使用将数据从剪贴板复制到包含Microsoft Word的应用程序 一旦用户在windows中点击copy anywhere,它就会将数据粘贴到word中。但是如果用户按Ctrl+C两次,我不想粘贴相同的数据。 现在,正如建议的那样,我不能使用IsCurrent来比较DataObjects 所以我是这样做的: if (Clipboard.GetData(DataFormats.UnicodeText).ToString()!=oldData) { //Paste and st

我正在使用将数据从剪贴板复制到包含Microsoft Word的应用程序

一旦用户在windows中点击copy anywhere,它就会将数据粘贴到word中。但是如果用户按Ctrl+C两次,我不想粘贴相同的数据。 现在,正如建议的那样,我不能使用
IsCurrent
来比较
DataObjects

所以我是这样做的:

if (Clipboard.GetData(DataFormats.UnicodeText).ToString()!=oldData)
  {
     //Paste and stuffs
     oldData= Clipboard.GetData(DataFormats.UnicodeText).ToString();
  }
但它只有在数据包含一些文本时才起作用,如果不包含,我就会得到空引用错误。
那么,有没有办法知道
数据对象
是否包含文本以外的内容(比如
位图
),并能够对它们进行比较?

您可以使用方法ContainsData检查对象的类型是否存在

  if (Clipboard.ContainsData(System.Windows.Forms.DataFormats.Text))
        {
            //do something
        }

您可以在DataFormats类中浏览适合您需要的格式

谢谢。我就是这么想的。这段代码中唯一可能导致空指针错误的是
.ToString()
调用。您只需将
Clipboard.GetData(DataFormats.UnicodeText)
预先提取到对象变量中,然后检查它是否为null,您知道。。。这是一般避免空指针的标准方法。