Tag: c# 4.0

将JSON字符串反序列化为c#对象

我的应用程序是在用C#编码的Asp.Net MVC3中。 这就是我的要求。 我想要一个以下格式的对象。当我反序列化Json字符串时,应该实现这个对象。 var obj1 = new { arg1=1,arg2=2 }; 使用以下代码后: string str = “{\”Arg1\”:\”Arg1Value\”,\”Arg2\”:\”Arg2Value\”}”; JavaScriptSerializer serializer1 = new JavaScriptSerializer(); object obje = serializer1.Deserialize(str); 我得到的对象即obje不作为obj1 在这个例子中,我的JSON字符串是静态的,但实际上JSON字符串将是动态生成的运行时,所以我将无法一直获得Arg1和Arg2。

为什么协方差不适用于generics方法

假设我有接口和类: public interface ITree {} public class Tree : ITree {} 由于IEnumerable是协变的 ,下面的代码行被成功编译: IEnumerable trees = new List(); 但是当我把它放入通用方法时: public void Do() where T : ITree { IEnumerable trees = new List(); } 我从编译器得到编译错误: 错误1无法将类型’System.Collections.Generic.List’隐式转换为’System.Collections.Generic.IEnumerable’。 存在显式转换(您是否缺少演员?)D:\ lab \ Lab.General \ Lab.General \ Program.cs 83 40 Lab.General 为什么协方差在这种情况下不起作用?

PLINQ执行比常规LINQ更糟糕

令人惊讶的是,使用PLINQ并没有为我创建的小测试案例带来好处; 事实上,它甚至比平时更糟糕的LINQ。 这是测试代码: int repeatedCount = 10000000; private void button1_Click(object sender, EventArgs e) { var currTime = DateTime.Now; var strList = Enumerable.Repeat(10, repeatedCount); var result = strList.AsParallel().Sum(); var currTime2 = DateTime.Now; textBox1.Text = (currTime2.Ticks-currTime.Ticks).ToString(); } private void button2_Click(object sender, EventArgs e) { var currTime = DateTime.Now; var strList = Enumerable.Repeat(10, repeatedCount); var result = strList.Sum(); […]

最后Block没有运行?

好吧这是一个奇怪的问题,我希望有人可以解释一下。 我有以下代码: static void Main(string[] args) { try { Console.WriteLine(“in try”); throw new EncoderFallbackException(); } catch (Exception) { Console.WriteLine(“in Catch”); throw new AbandonedMutexException(); } finally { Console.WriteLine(“in Finally”); Console.ReadLine(); } } 现在,当我将其编译为目标3.5(2.0 CLR)时,它将弹出一个窗口,说“XXX已停止工作”。 如果我现在单击取消按钮它将运行finally,如果我等到它完成查找并单击关闭程序按钮它也将运行finally。 现在有趣和令人困惑的是,如果我对4.0编译同样的事情点击取消按钮将运行finally块并单击关闭程序按钮不会。 我的问题是:为什么在点击关闭程序按钮时,终于在2.0而不是4.0上运行? 这有什么影响? 编辑:我在Windows 7 32位的发布模式(内置发布模式)中从命令提示符运行此命令。 错误消息:在Windows查找问题后,下面的第一个结果是3.5点击关闭,第二个是我在4.0上运行它并执行相同的操作。

有没有理由在接口中声明可选参数?

您可以在接口方法中声明可选参数,但不需要实现类来将参数声明为可选参数,正如Eric Lippert解释的那样 。 相反,您可以在实现类中将参数声明为可选参数,但不能在接口中声明。 那么有什么理由在接口中声明可选参数吗? 如果没有,为什么允许? 例子: public interface IService1 { void MyMethod(string text, bool flag = false); } public class MyService1a : IService1 { public void MyMethod(string text, bool flag) {} } public class MyService1b : IService1 { public void MyMethod(string text, bool flag = true) { } } public interface IService2 { void […]

将WCF 4中的默认JSON序列化程序替换为JSON.NET

我想用JSON.NET替换默认的WCF JSON(对于所有数据类型)序列化。 我在网上搜索过,找不到合适的解决方案。 这是我的目标: [JsonObject] public class TestObject { [JsonProperty(“JsonNetName”)] public string Name = “John”; [JsonProperty] public DateTime Date = DateTime.Now; } 这是我的WCFfunction: [OperationContract] [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] List Get(); 这是Global.asax中的代码: protected void Application_Start(object sender, EventArgs e) { // Create Json.Net formatter serializing DateTime using the ISO 8601 format var serializerSettings = new […]

C#正则表达式将单词与点匹配

快速的棕色狐狸跳过懒狗“是一个英语pangram,字母!即包含所有字母表的短语。它已用于测试打字机字母表和计算机键盘,以及其他涉及英文字母中所有字母的申请。 我需要得到“字母表”。 正则表达式中的单词。 在上面的文本中有3个实例。 它不应该包括“字母!”。 我刚试过正则表达式 MatchCollection match = Regex.Matches(entireText, “alphabet.”); 但这会返回4个实例,包括“alphabet!”。 如何省略这一点,只获得“字母表”。

C#中具有相同名称和签名但返回类型不同的方法

我接受了一次采访,询问了以下情况: 问题:具有相同名称和签名但返回类型不同的方法。 是否有可能,他问我这种类型是什么。 有人可以告诉我以下内容: 在任何情况下都是可能的事情(比如基类中的一个和至少派生类中的一个?)如果是这样的类型是什么? 像编译或运行时多态? 在编译时多态,如果返回类型的方法也与签名不同怎么办? 但只有function名称相同。 是编译时多态吗? 在覆盖中,如果我有不同的返回类型但方法名称和签名相同怎么办? 可能吗 ? (他问我这个问题,我回答错误:()请帮帮我。 谢谢

如何签署ClickOnce应用程序

我有一个为客户端构建的ClickOnce应用程序,我需要它来自受信任的发布者。 如何获取Authenticode证书并使用它签署我的应用程序? 因此,当应用程序启动时,它来自受信任的发布者? 如何安装证书? 我是否必须在我的开发服务器上安装它,或者安装它的位置是否重要? 整个过程如何运作? 我不想在证书上花费3-5百美元,并且安装错误并且运气不好。 是否有关于购买和安装证书以及签署ClickOnce应用程序的好教程?

从C#应用程序运行PowerShell脚本

我正在尝试从ac#应用程序执行PowerShell脚本。 该脚本必须在特殊的usercontext下执行。 我尝试过不同的场景,有些人正在努力: 1.来自PowerShell的直接调用 我直接从ps-console调用脚本,该控制台在正确的usercredentials下运行。 C:\Scripts\GroupNewGroup.ps1 1 结果:成功运行脚本。 2.来自ac#console应用程序 我从ac #consoleapplication调用了脚本,该脚本是在正确的usercredentials下启动的。 码: string cmdArg = “C:\\Scripts\\GroupNewGroup.ps1 1” Runspace runspace = RunspaceFactory.CreateRunspace(); runspace.ApartmentState = System.Threading.ApartmentState.STA; runspace.ThreadOptions = PSThreadOptions.UseCurrentThread; runspace.Open(); Pipeline pipeline = runspace.CreatePipeline(); pipeline.Commands.AddScript(cmdArg); pipeline.Commands[0].MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output); Collection results = pipeline.Invoke(); var error = pipeline.Error.ReadToEnd(); runspace.Close(); if (error.Count >= 1) { string errors = “”; foreach (var […]