Linq声明差异。

时间:2015-06-23 21:04:23

标签: .net vb.net linq

有人可以解释这个区别。我试图避免文件夹中的隐藏文件并获取计数。 1声明不起作用,但第二声明不起作用  声明有效。我无法弄清楚原因。什么是'&'在linq。提前谢谢!

subFolder.GetFiles().Select(Function(k) k).Where(Function(m) m.Attributes <> FileAttributes.Hidden).Count


subFolder.GetFiles().Select(Function(k) k).Where(Function(m) (m.Attributes And FileAttributes.Hidden) = 0).Count

2 个答案:

答案 0 :(得分:2)

m.Attributes是[Flags]枚举,这意味着值中的每个位代表不同的标志。执行<>时,您正在测试“隐藏的不是唯一设置的值吗?”对于许多文件都是如此。当您执行& == 0时,您正在测试“仅查看隐藏位,是否将值设置为0?换句话说,是否未设置隐藏标志?”

答案 1 :(得分:2)

var Body = React.createClass({ getInitialState = function() { return {}; }, componentDidMount: function() { intervalId = setInterval(this.refreshStats, 1000); this.setState({intervalId: intervalId}); }, componentWillUnmount: function(){ clearInterval(this.state.intervalId); }, refreshStats: function() { console.log(this.state.intervalId); clearInterval(this.state.intervalId); }, render: function() { ... } }); 可以包含一些标记值的组合,m.Attributes就是其中之一。(完整列表可以在MSDN中看到)

所以,第一个陈述的谓词:

FileAttributes.Hidden

测试“不是 m.Attributes <> FileAttributes.Hidden 只包含一个标记m.Attributes)”,对于HiddenHidden的组合的值,或者{{ {1}}和ReadOnly

第二个陈述:

Hidden

测试“从System获取(m.Attributes And FileAttributes.Hidden) = 0 的部分值,并查看是否未设置”,至少如果该值未设置Hidden则为真,并且其他标志被忽略。因此,对于m.AttributeHidden,或HiddenReadOnly等的组合,这是错误的。

作为旁注,Hidden什么都不做,可以省略。

System