小编Axo*_*onn的帖子

IEnumerable vs List - 使用什么?他们是如何工作的?

我对枚举器如何工作以及LINQ有些怀疑.考虑这两个简单的选择:

List<Animal> sel = (from animal in Animals 
                    join race in Species
                    on animal.SpeciesKey equals race.SpeciesKey
                    select animal).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

要么

IEnumerable<Animal> sel = (from animal in Animals 
                           join race in Species
                           on animal.SpeciesKey equals race.SpeciesKey
                           select animal).Distinct();
Run Code Online (Sandbox Code Playgroud)

我更改了原始对象的名称,因此这看起来像一个更通用的示例.查询本身并不重要.我想问的是:

foreach (Animal animal in sel) { /*do stuff*/ }
Run Code Online (Sandbox Code Playgroud)
  1. 我注意到,如果我使用IEnumerable,当我调试并检查"sel"时,在这种情况下是IEnumerable,它有一些有趣的成员:"inner","outer","innerKeySelector"和"outerKeySelector",这些最后2个出现成为代表."内部"成员中没有"Animal"实例,而是"Species"实例,这对我来说非常奇怪."外部"成员确实包含"Animal"实例.我假设两位代表确定哪些进入,哪些进出?

  2. 我注意到如果我使用"Distinct","inner"包含6个项目(这是不正确的,因为只有2个是Distinct),但"outer"确实包含正确的值.同样,委托方法可能决定了这一点,但这比我对IEnumerable的了解要多一些.

  3. 最重要的是,两种选择中的哪一种是性能最佳的?

邪恶的名单转换通过.ToList()

或者直接使用枚举器?

如果可以,请解释一下或抛出一些解释IEnumerable使用的链接.

c# linq ienumerable list

634
推荐指数
10
解决办法
42万
查看次数

将"NonSerializedAttribute"设置为"自动属性"

这不能在C#中完成.有办法吗?

...

,如果我的小双关语不被理解,我的意思是:我怎样才能将C#中的属性标记为NonSerialized?当然,当属性包含逻辑时,很自然地无法执行它,但是自动属性是可序列化的,因此,我希望有一些方法可以阻止它们的序列化.

c#

19
推荐指数
3
解决办法
1万
查看次数

Eclipse的代码折叠插件?

我不喜欢Eclipse的代码折叠功能,因为在关闭文件时不会保存折叠状态,就像Visual Studio执行其#region指令一样.

有没有人知道一个插件可以保存每个文件的代码折叠状态,这样当我打开它时,代码会保持折叠状态?

eclipse

12
推荐指数
1
解决办法
1万
查看次数

Bitwise Or:C#与C++

).假设你有两个整数,a = 8,b = 2.在C++ a |中 b是真的.我使用该行为来处理标志集合.例如,标志将是1,2,4,8等,并且它们的任何集合都是唯一的.我无法在C#中找到如何做到这一点,作为| 和&运算符的行为不像在C++中那样.我在C#中阅读了有关运算符的文档,但我仍然没有得到它.

编辑:

不幸的是,我似乎把事情搞砸了.以此代码为例:

byte flagCollection = 8;
byte flag = 3;

if ((flag | flagCollection) != 0) MessageBox.Show("y"); else MessageBox.Show("n");
Run Code Online (Sandbox Code Playgroud)

对于我放入旗帜的任何值,这都返回"y".这很明显,因为3 | 8嗯...我想做的是有一个标志集合:1,2,4,8,16,当我给出一个数字时,能够确定它是什么标志.

c# c++ boolean bitwise-operators

5
推荐指数
3
解决办法
1197
查看次数

在C#中定义新的编译时常量(对于#if)

我正在尝试创建一个新的常量,所以我可以像DEBUG常量一样使用它:

#if(DEBUG)
    public void LoadProcedure ()
#else
    private void LoadProcedure ()
#endif
Run Code Online (Sandbox Code Playgroud)

这适用于Visual Studio 2008中的调试/发布配置,但我需要的是TDD或TESTING常量.我创建了一个名为"Testing"的新构建配置.现在的问题是我如何定义它.

必须是一些命令行参数:: - ).

先感谢您 ::- ).

c#

5
推荐指数
1
解决办法
3068
查看次数

使用连接时跟踪LINQ

[注意答案:我实际上是在查询内存对象,这就是为什么ToTraceString不起作用.我添加了这个以节省阅读器阅读我的长篇文章的潜在时间].

ToTraceString试图检查我的LINQ查询最终看起来如何使用命令.但是,今天我的查询有点复杂,涉及到join一切突然,当我尝试跟踪我的字符串时,我收到此错误:

无法将类型为'd__7a`1 [EGSLanguageProviderShared.DTODataType]'的对象强制转换为'System.Data.Objects.ObjectQuery'.

我的查询和后续调用ToTraceString如下(请注意,必须引用System.Data.Entity才能使其工作).我正在查询的两个对象(langDT和langInstructionsAVDT)是来自同一数据库的实体框架(.Net 3.5)对象.我的Where子句(== av.InstructionAVKey)使用一个简单的Value Collection Class,没有什么可看的.

      IEnumerable<DTODataType> dts = 
          (from langDT in langDTs 
          join langIAVDT in langInstructionsAVDTs 
          on langDT.DataTypeKey equals langIAVDT.DataTypeKey 
          where langIAVDT.InstructionAVKey == av.InstructionAVKey 
          select langDT).Distinct();
      var sql = ((System.Data.Objects.ObjectQuery)dts).ToTraceString();
Run Code Online (Sandbox Code Playgroud)

关于如何看到这个Join的LINQ翻译的任何想法?:: - ).我注意到System.Data.Objects有更多类型的查询,但是我无法得到任何与这种情况更相关的查询.

后期编辑:

正如您所建议的那样,我尝试将IEnumerable更改为IQueryable,但这导致了类型不兼容编译错误:: - /.

在进行显式转换后,我得到了相同的错误,但在运行时(Unable to cast object of type '<DistinctIterator>d__7a1[EGSLanguageProviderShared.DTODataType]' to type 'System.Linq.IQueryable1 [EGSLanguageProviderShared.DTODataType]'.`)

附加代码:我的对象langDTs和langInstructionsAVDTs是:

List<DTOInstructionActiveValueDataType> langInstructionsAVDTs = CurrentLPInstructionManager.GetInstructionsActiveValuesDataTypes((from avKey in langInstructionsAVs select avKey.InstructionAVKey).Distinct().ToArray());

List<DTODataType> langDTs = _LPDataTypeManager.GetDataTypes((from dt in langInstructionsAVDTs orderby …
Run Code Online (Sandbox Code Playgroud)

c# linq

5
推荐指数
2
解决办法
877
查看次数

不能忽略Mercurial Commit(TortoiseHG)中的文件

我已经使用Mercurial超过一年了.现在,我添加了一个新的.Net项目.我选择忽略Solution文件夹中的所有BIN/OBJ文件夹,一切顺利.我使用掩码忽略整个文件夹或右键单击 - >忽略命令忽略特定文件.

现在,突然之间,我再也看不到Ignore命令了!通常,它应该在右键单击文件时出现.它没有.我还尝试通过在.hgignore文件中添加此行来手动忽略该文件:

Client/eTimeKeepLoading.png
Run Code Online (Sandbox Code Playgroud)

但所有这一切都是为了(如下图所示)标记我的.hgignore文件以进行提交,但该死的PNG文件仍然在列表中.这家伙怎么了?:: - D.

我没有看到

version-control mercurial ignore tortoisehg hgignore

5
推荐指数
1
解决办法
1873
查看次数

复制粘贴在JavaScript中

这是一个古老的问题,但我仍然遇到麻烦.你看,我正在尝试将一些Excel数据粘贴到文本区域,但是这些愚蠢的浏览器在执行此操作时会长时间冻结,因为上帝知道他们做了什么"聪明"的解析.我无法摆脱它(文件上传是不可能的,我的老板希望我在文本区域中粘贴Excel中的行).

好消息是粘贴在标准文本框WORKS中.但我不能强迫他们粘贴那里.所以我试图捕获文本区域中的粘贴事件,然后将文本扔到文本框中.不幸的是,我在粘贴部分停了下来.我无法通过JS将文本粘贴到简单的文本框中.

所以我的问题是:如何粘贴文本,如何通过JS调用它?有一些解决方案只能在IE中运行,当然不是很好:) - ).

javascript clipboard copy-paste

4
推荐指数
1
解决办法
1193
查看次数

对于LINQ Select中的每个

对于那些比我更了解.Net内部工作原理的人来说,这只是一个简单的问题:: - ).我只是确定我明白了什么.

我看到它的方式,当你在foreach中运行LINQ时,LINQ枚举器被评估(运行),它返回一个集合,foreach继续在该集合上进行.但是......我仍然不确定:

foreach (VCCTreeItem ti in (from treeItems in TreeItems select treeItems))
Run Code Online (Sandbox Code Playgroud)

是否在每个循环中重新评估(执行)LINQ语句?我会想(并希望)不.但是,在对a中的集合执行操作foreach时,如果修改了集合,则会在运行时收到错误消息.这让我相信在幕后可能会发生一些可疑的事情.我从来没有时间详细拆解/检查这个,所以这就是我问你的原因.我相信你们中的一些人从头顶知道答案:: - D.

哦,我想我可以问同样的问题:

foreach (VCCTreeItem ti in TreeItems)
Run Code Online (Sandbox Code Playgroud)

如果TreeItems是get我执行某些操作的属性,则将对属性进行求值,作为值返回,并且foreach将对该值进行操作.

c# linq

3
推荐指数
1
解决办法
3202
查看次数

如何将大于和小于添加到批处理文件变量中

当我尝试

@echo off
set PTag=^<BR^>
echo %PTag%
Run Code Online (Sandbox Code Playgroud)

我什么都没有。

现在有趣的是,如果在最后一个回显之后有一个空行,我将得到:

The syntax of the command is incorrect.
Run Code Online (Sandbox Code Playgroud)

如果我删除@echo,那么它实际上输出

echo <BR>
Run Code Online (Sandbox Code Playgroud)

我想在变量内添加各种HTML标记,然后将这些变量连接起来以创建将在文件中输出的HTML。

batch-file

3
推荐指数
2
解决办法
2261
查看次数