在从剪贴板获取数据之前,我应该总是调用 ContainsData 吗?
Should I always call ContainsData before I get data from the Clipboard?
阅读了一些关于从剪贴板获取数据的 MSDN 帖子后,这些帖子似乎建议在从剪贴板获取数据之前调用 ContainsData 方法。
这对我来说似乎有点不必要,我不确定这样做是否有充分的理由,或者我是否误解了 MSDN 说明。
use the corresponding ContainsFormat methods first to determine whether data is available in a particular format.
Use the ContainsData method to determine whether the Clipboard contains data in the specified format or a compatible format before retrieving it
所以这是我的方法:
// Should return null if no text is found on the Clipboard.
public string GetText()
{
if (!Clipboard.ContainsData(DataFormats.Text))
return null;
// GetData returns null if the clipboard is empty of does not match the format.
return Clipboard.GetData(DataFormats.Text) as string;
}
我意识到我可以使用 ContainsText
和 GetText
(尽管 GetText
returns String.Empty
如果没有找到文本 - 这并不理想,因为那么我们不知道它是否无法获取任何文本,或者剪贴板是否真的包含一个空字符串。
无论如何,评论者问我为什么我有 if 语句,而我的回答 "because MSDN told me so" 似乎有点缺乏理解(我确实如此)。任何人都可以阐明一下吗?我需要 if 语句吗?
我真的认为你需要它。原因如下:
If this method cannot find data in the specified format, it attempts
to convert the data to the format. If the data cannot be converted to
the specified format, or if the data was stored with automatic
conversion set to false, this method returns null.
所以这基本上是在告诉你这是因为强大的编程。您必须获得与您的意图一致的结果:从一个对象获取 null
而该对象不是该对象可能会导致问题。
经过进一步考虑,我意识到问题不在if语句本身,而是在returned值,因为如果剪贴板中的数据GetData方法已经returnnull无法转换,因此它是多余的并且可能实际上没有用,考虑到数据是否无法转换或实际上是空的,不提供任何附加信息。
此时我会写一个这样的方法:
public bool isClipboardDataValid(out string _data)
{
bool _isValid = false;
if (Clipboard.ContainsData(DataFormats.Text))
{
_data = Clipboard.GetData(DataFormats.Text);
_isValid = true;
}
return _isValid;
}
然后调用此方法从而获得额外信息。
阅读了一些关于从剪贴板获取数据的 MSDN 帖子后,这些帖子似乎建议在从剪贴板获取数据之前调用 ContainsData 方法。
这对我来说似乎有点不必要,我不确定这样做是否有充分的理由,或者我是否误解了 MSDN 说明。
use the corresponding ContainsFormat methods first to determine whether data is available in a particular format.
Use the ContainsData method to determine whether the Clipboard contains data in the specified format or a compatible format before retrieving it
所以这是我的方法:
// Should return null if no text is found on the Clipboard.
public string GetText()
{
if (!Clipboard.ContainsData(DataFormats.Text))
return null;
// GetData returns null if the clipboard is empty of does not match the format.
return Clipboard.GetData(DataFormats.Text) as string;
}
我意识到我可以使用 ContainsText
和 GetText
(尽管 GetText
returns String.Empty
如果没有找到文本 - 这并不理想,因为那么我们不知道它是否无法获取任何文本,或者剪贴板是否真的包含一个空字符串。
无论如何,评论者问我为什么我有 if 语句,而我的回答 "because MSDN told me so" 似乎有点缺乏理解(我确实如此)。任何人都可以阐明一下吗?我需要 if 语句吗?
我真的认为你需要它。原因如下:
If this method cannot find data in the specified format, it attempts to convert the data to the format. If the data cannot be converted to the specified format, or if the data was stored with automatic conversion set to false, this method returns null.
所以这基本上是在告诉你这是因为强大的编程。您必须获得与您的意图一致的结果:从一个对象获取 null
而该对象不是该对象可能会导致问题。
经过进一步考虑,我意识到问题不在if语句本身,而是在returned值,因为如果剪贴板中的数据GetData方法已经returnnull无法转换,因此它是多余的并且可能实际上没有用,考虑到数据是否无法转换或实际上是空的,不提供任何附加信息。
此时我会写一个这样的方法:
public bool isClipboardDataValid(out string _data)
{
bool _isValid = false;
if (Clipboard.ContainsData(DataFormats.Text))
{
_data = Clipboard.GetData(DataFormats.Text);
_isValid = true;
}
return _isValid;
}
然后调用此方法从而获得额外信息。