小编zza*_*ndy的帖子

是否有IEnumerable实现只迭代它的源(例如LINQ)一次

提供itemsq LINQ表达式的结果:

var items = from item in ItemsSource.RetrieveItems()
            where ...
Run Code Online (Sandbox Code Playgroud)

假设每个项目的生成需要一些不可忽略的时间.

有两种操作模式:

  1. 使用foreach将允许开始使用集合开头的项目,而不是最终可用的项目.但是,如果我们想稍后再次处理相同的集合,我们将不得不复制保存它:

    var storedItems = new List<Item>();
    foreach(var item in items){
        Process(item);
        storedItems .Add(item);
    }
    
    // Later
    foreach(var item in storedItems){
        ProcessMore(item);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    因为如果我们刚刚制作的foreach(... in items)temsSource.RetrieveItems()会再次被召唤.

  2. 我们可以直接使用.ToList(),但这会迫使我们等待最后一项检索,然后才能开始处理第一项.

问题:是否有一个IEnumerable实现会像常规的LINQ查询结果一样首次迭代,但会在进程中实现,以便第二次foreach迭代存储的值?

.net c# linq ienumerable

22
推荐指数
2
解决办法
1883
查看次数

如何防止枚举中的重复值?

我想知道有没有办法防止enum重复键编译?

例如,enum下面将编译

public enum EDuplicates
{
    Unique,
    Duplicate = 0,
    Keys = 1,
    Compilation = 1
}
Run Code Online (Sandbox Code Playgroud)

虽然这段代码

Console.WriteLine(EDuplicates.Unique);
Console.WriteLine(EDuplicates.Duplicate);
Console.WriteLine(EDuplicates.Keys);
Console.WriteLine(EDuplicates.Compilation);
Run Code Online (Sandbox Code Playgroud)

会打印

Duplicate
Duplicate
Keys
Keys
Run Code Online (Sandbox Code Playgroud)

.net c# enums

14
推荐指数
3
解决办法
5568
查看次数

什么是PowerShell有用?

我是一名称职的C#程序员,也是PowerShell的新手.到底有什么好处呢?它更像是程序员的工具还是管理员?

请分享您的经验.何时使用.NET程序集编写脚本比使用C#工具更容易?你用它做什么真正的生产任务?

也许问题应该是:与C#相比有什么好处,而不是批处理

.net powershell scripting

13
推荐指数
3
解决办法
8288
查看次数

如何在WPF中处理Canvas.Top更改事件?

我有一个元素定位在Canvas使用附加属性Canvas.TopCanvas.Left.然后使用动画将元素移动到不同的坐标集,如下所示:

DoubleAnimation left = new DoubleAnimation( oldLeft, newLeft );
DoubleAnimation top = new DoubleAnimation( oldTop, newTop );

element.BeginAnimation( Canvas.LeftProperty, left );
element.BeginAnimation( Canvas.TopProperty, top );
Run Code Online (Sandbox Code Playgroud)

有没有办法在任何时候Canvas.TopCanvas.Left更改时接收事件?优选地与动画无关.

c# wpf canvas attached-properties

10
推荐指数
1
解决办法
4640
查看次数

如何使用.NET远程扩展环境变量?

我需要一种方法来扩展远程机器上的环境变量.

假设我有一个文件夹的路径,%appdata%\MyApp\Plugins或者%ProgramFiles%\MyCompany\MyApp\Plugins我想列出该文件夹中的文件以进行审计.唯一的问题是我想在远程计算机上执行此操作,但我有管理员访问权限.

一个额外的问题(但不是必不可少的)是如何为远程机器上的给定用户执行此操作?

.net c# remote-access environment-variables

10
推荐指数
1
解决办法
5420
查看次数

如何使.NET垃圾收集频率降低?

我有一个应用程序,处理大量的小对象,例如每秒2000条消息.一条消息大约是100字节,可能更少.应用程序运行在负载下6个半小时,在这段时间它有264 416 0 根的集合,166 699 1 第一根和69 608 2 根.这是每秒11.6,7.3和3个集合.

问题是如何减少垃圾收集频率?

UPD: 应用程序是一个从WCF接收消息的服务器,通过几个处理模块将它们保存到数据库中.

我的印象是GC应该在一段时间后适应并增加发电量,但事实并非如此.

UPD 2:正如leppie的回答所建议的那样,服务器模式下 GC确实减少了10倍的收集.而且,正如Richter所描述的那样,频繁的收藏并不是一件坏事.

.net garbage-collection

8
推荐指数
2
解决办法
725
查看次数

如何从Windows上的python启动守护进程?

我的python脚本可以产生一个无限期运行的进程吗?

我不太熟悉python,也不熟悉产生deamons,所以我想到了这个:

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.CREATE_NEW_PROCESS_GROUP | subprocess.CREATE_NEW_CONSOLE
subprocess.Popen(executable, close_fds = True, startupinfo = si)
Run Code Online (Sandbox Code Playgroud)

该过程继续运行python.exe,但是一关闭cmd窗口就会关闭.

python windows daemon

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

如何从属性中抛出编译错误?

.NET中有一些属性(例如ObsoleteAttribute),它们能够阻止编译或至少抛出编译时警告,具体取决于它们的配置.

如何编写能够干扰编译的属性?有没有办法从微软以外的地方做到这一点?

.net c# attributes

6
推荐指数
1
解决办法
4998
查看次数

获取模拟的用户名

我有一个类需要知道当前有效的用户名.Environment.UserName或是WindowsIdentity.GetCurrent().Name为了那个.但是当启用模拟时,它们返回的LocalUser名称不是ImpersonatedUser名称.

如何获取当前模拟用户的姓名?

该应用程序是C#控制台应用程序,我知道模仿是有效的,因为我获得了特权ImpersonatedUser.当然,我可以使用模拟代码将模拟的用户名保存到某个全局变量,但这样做是错误的.

更新:

模拟代码:

if (LogonUser(userName, domain, password, LOGON32_LOGON_NEW_CREDENTIALS/*=9*/, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
  if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
  {
    WindowsIdentity tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
    _impersonationContext = tempWindowsIdentity.Impersonate();

    // WindowsIdentity.GetCurrent().Name equals "LocalUser" 
    // while userName equals "ImpersonatedUser"
    ...
Run Code Online (Sandbox Code Playgroud)

我可以控制模拟代码,但我更愿意将其与解决方案的其他部分保持独立.

.net impersonation

6
推荐指数
2
解决办法
6427
查看次数

lisp中的布尔函子

我发现自己处于需要将多个谓词合并为一个的情况.有没有一种标准的方法来实现这一点,类似于compliment

假设有几个简单谓词(例如is-fruit-p,is-red-p,grows-on-trees-p等),并从其中的一个子集必须使用多于一个的谓词被过滤出的对象的列表.实现这一目标的最佳方法是:

(remove-if #'is-fruit-p 
           (remove-if #'is-red-p 
                      (remove-if #'grows-on-trees-p list-of-objects)))
Run Code Online (Sandbox Code Playgroud)

lisp lambda common-lisp functor higher-order-functions

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

如何将数据流流入sqlserver?

我需要从一个数据库复制大型结果集并将其保存到另一个数据库.

存储过程用于获取和存储,因为在保存期间涉及某些逻辑.

我试图找到一个高效的解决方案,我无法将整个数据集保存在内存中,我想尽量减少往返次数.

从源表读取数据

var reader = fetchCommand.ExecuteReader();
while (reader.Read()){...}
Run Code Online (Sandbox Code Playgroud)

有没有办法将这些数据插入另一个sqlCommand,而无需将整个数据集加载到一个DataTable但没有插入一行的数据?

Sqlserver是源数据库和目标数据库上的MS SQL Server 2008.数据库位于不同的服务器上.不能使用SSIS或链接服务器.

编辑: 似乎可以使用表值参数将行流式传输到存储过程中.也将研究这种方法.

更新: 是的,可以将数据流出command.ExecuteReader到另一个命令,如下所示:

var reader = selectCommand.ExecuteReader();
insertCommand.Parameters.Add(
    new SqlParameter("@data", reader)
        {SqlDbType = SqlDbType.Structured}
    );

insertCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

insertCommand带有表值参数的存储过程在哪里@data.

c# sql-server bulkinsert sql-server-2008

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

如何"有COUNT(DISTINCT(col1,col2))"

所以我有一个表有三列- col1,col2col3.我需要选择那些col1共享行的值,只有一个col2和的组合col3.在理想的世界里,我会这样写:

SELECT col1 FROM table
GROUP BY col1
HAVING COUNT(DISTINCT(col2, col3)) = 1
Run Code Online (Sandbox Code Playgroud)

如何在现实世界中做到这一点?

到目前为止,我有两个解决方案-通过组col1col2col1col3他们加入的结果; 或者按所有三个分组,然后分组col1.不幸的是,我得到(非常)不同的数量.

该数据库位于SQL Server 2005上.

sql sql-server sql-server-2005

2
推荐指数
1
解决办法
6701
查看次数