如何使用异步调用的结果来水合词典?

假设我的代码如下所示: public async Task DoSomethingReturnString(int n) { … } int[] numbers = new int[] { 1, 2 , 3}; 假设我想创建一个字典,其中包含为每个与此类似的数字调用DoSomethingReturnString的结果: Dictionary dictionary = numbers.ToDictionary(n => n, n => DoSomethingReturnString(n)); 这不起作用,因为DoSomethingReturnString返回Task而不是string 。 intellisense建议我尝试将我的lambda表达式指定为异步,但这似乎也没有解决问题。

Active Directory嵌套组

我有一个C#4.0程序,可以检索特定AD组的所有成员。 在此AD组中,包含其他成员的其他AD组。 我需要我的程序来识别它是一个组并检索该组中的成员。 我知道我需要写一个递归程序,但我希望有人可能已经完成了它。 如果没有,有人可以告诉我AD属性属性,以确定该成员是实际的组吗?

从内存而不是磁盘向CompilerParameters ReferenceAsAsmblies提供程序集?

我有一个CompilerParameters对象,用于提供Microsoft.CSharp.CSharpCodeProvider对象和从中派生的ICodeCompiler对象。 一切正常,我可以动态编译代码。 我的问题是引用的程序集。 现在,我只需将System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()所有程序集添加到编译器参数的ReferencedAssemblies 。 这适用于硬盘上的文件。 但是我有一个在内存中而不在磁盘上的程序集。 当我尝试引用它时,我得到一个FileNotFoundException ,我期望它,因为它试图添加一个不存在的路径。 那么如何将实际的Assembly对象传递给CompilerParameters.ReferencedAssemblies ? 我从2006年开始在网上看过几篇post,之前说这根本不可能。 我希望.net 3.5和.net 4.0已经添加了对这类内容的支持,但我不确定。 仅供参考,我使用的是.NET 4.0 此外,我现在正在程序空间的byte []创建一个临时文件,然后将该文件加载到程序集中。 我知道编译器会在后台执行此操作,但我相信它也会自行清理。 如果我能这样做会很棒: CompilerParameters.ReferencedAssemblies.Add(Assembly a)

启用WCF服务以与JSON一起使用

我创建了一个wcf服务。 当我通过添加作为web服务在.net中使用时,这工作正常。 但我想让它能够用作iPhone应用程序作为JSON调用。 为了测试,我已经在.net中使用它与JSON但它无法正常工作。 我知道之前有这样的问题,我已经找到了这个找不到我的解决方案。 我的配置: 接口代码: [ServiceContract] public interface IGolfPyramidService { [WebInvoke(UriTemplate = “/Test”, Method = “POST”, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] [OperationContract] string Test(); } Myservice.cs代码: [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class MyService : IMyService { public string Test() { return “success”; } } 我想使用url格式调用该方法,如: http : //example.com/MyService.svc/test

C# – 在处理时阻止更改文件夹

我有一个单线程程序来处理源目录中的文件夹和文件。 有没有办法阻止我的程序正在处理它的源文件目录中的文件夹被其他进程修改? 我正在考虑在文件夹本身上放置某种独占锁的方法,所以只有我程序的进程才能使用它。 注意: 我不想阻止根源目录本身,只是在该目录的顶层中的任何文件夹,我可能在任何特定时刻处理。 我仍然希望能够允许外部进程将文件夹添加到源目录,而我正在处理其他文件夹。 更新: @Yuri – 是的,这是一个Windows程序,准确的Windows服务应用程序。 使这既具有挑战性又必要的部分原因是我需要在源目录中的单独目标目录中重新创建我正在处理的任何文件夹的结构。 因此,当我的程序正在使用文件夹时,我无法修改文件夹和文件。

在appdata文件夹中创建sql server压缩文件

我正在开发一个简单的软件,它首先使用Entity Framework代码,然后使用sql server compact 4.此时此设置正常工作。 entity framework创建sql server压缩文件(如果它尚不存在)。 数据库的路径是在一个连接字符串中定义的,该连接字符串存储在app.config文件中。 它是这样构建的: 但是,我想将数据库放在当前用户的Application Data文件夹(我的win7机器上的C:\ Users \ User \ AppData \ Roaming文件夹)中的文件夹中。 我已经尝试将connectionstring的数据源设置为%APPDATA%\ Database.sdf,但是这不起作用,我得到了“路径中的非法字符”exception。 我想坚持使用connectionstring方法,因为我想为我的unit testing使用不同的数据库而不是我的实际应用程序。 这样,通过在项目的根目录中放置app.config文件,可以轻松修改数据库。 有人能引导我朝着正确的方向前进吗?

从System.Threading.Timer在UI中调用时如何避免泄漏句柄?

看起来在System.Threading.Timer回调函数的回调中调用Winforms控件上的Invoke,直到计时器被释放。 有没有人知道如何解决这个问题? 我需要每秒轮询一次值并相应地更新UI。 我在一个测试项目中尝试过,以确保这确实是泄漏的原因,这只是以下几点: System.Threading.Timer timer; public Form1() { InitializeComponent(); timer = new System.Threading.Timer(new System.Threading.TimerCallback(DoStuff), null, 0, 500); } void DoStuff(object o) { this.Invoke(new Action(() => this.Text = “hello world”)); } 如果您在Windows任务管理器中观看,这将泄漏2个句柄/秒。

MemberExpression:从范围”引用的InvalidOperationExpression变量’x’,但未定义

我正在使用System.Linq.Expressions 我试图构建一个包含MemberExpression的简单LambdaExpression 。 如果我使用System.Linq.Expressions API(例如MakeMemberAccess )显式创建MemberExpression,我将在我调用Compile()时得到错误“InvalidOperationExpression变量’x’从范围”引用,但它没有定义” LambdaExpression。 例如,这是我的代码 Expression<Func> expression1, expression2, expression3; Func fn; expression1 = (x) => x.Title; fn = expression1.Compile();//works fn(c); MemberExpression m; m = Expression.MakeMemberAccess( Expression.Parameter(typeof(Customer), “x”), typeof(Customer).GetProperty(“Title”)); expression2 = Expression.Lambda<Func>(m, Expression.Parameter(typeof(Customer), “x”)); m = Expression.Property(Expression.Parameter(typeof(Customer),”x”), “Title”); expression3 = Expression.Lambda<Func>(m, Expression.Parameter(typeof(Customer), “x”)); fn = expression3.Compile();//InvalidOperationExpression variable ‘x’ referenced from scope ”, but […]

委托中变量的范围

我发现以下内容相当奇怪。 然后,我主要使用动态语言中的闭包,这对于同一个“bug”不应该是可疑的。 以下使编译器不满意: VoidFunction t = delegate { int i = 0; }; int i = 1; 它说: 名为“i”的局部变量不能在此范围内声明,因为它会为“i”赋予不同的含义,“i”已在“子”范围中用于表示其他内容 所以这基本上意味着在委托中声明的变量将具有声明的函数的范围。不完全是我所期望的。 我甚至没有试过调用这个函数。 至少Common Lisp有一个function,你可以说变量应该有一个动态名称,如果你真的希望它是本地的。 这在创建不泄漏的宏时尤其重要,但这样的东西也会有所帮助。 所以我想知道其他人如何解决这个问题呢? 为了澄清我正在寻找一个解决方案,其中我在delegete中声明的变量不会干扰委托后声明的变量。 我仍然希望能够捕获委托之前声明的变量。

如何更换直引号(“)

我想用C#替换一个直引号(“)。 我可能会遗漏一些小东西,但我无法用正常的string.Replace(); someWord.Replace(@”””, “&”); 我可以使用普通的string.Replace(); 还是我需要使用正则Regex ? 如果是后者, Regex替换什么样的?