Tag: c#

C#从对象列表中删除对象

我有一个对象列表,我试图通过首先检查对象中的属性来删除列表中的特定对象。 最初我使用foreach但后来意识到你在修改集合时不能使用它,所以我决定使用普通for但是后来我不知道如何编写能够完成我最初编写的代码。 我如何编写代码来完成我最初的工作? 谢谢 这是我的代码: public void DeleteChunk(int ChunkID) { //foreach (Chunk i in ChunkList) //{ // if (i.UniqueID == ChunkID) // { // ChunkList.Remove(i); // } //} //This won’t work because here i is just an integer so i.UniqueID won’t exist. for (int i = 0; i < ChunkList.Capacity; i++) { if (i.UniqueID == […]

这个非锁定的TryGetValue()字典是否可以访问线程安全?

private object lockObj = new object(); private Dictionary dict = new Dictionary(); public string GetOrAddFromDict(int key) { string value; // non-locked access: if (dict.TryGetValue(key, out value)) return value; lock (this.lockObj) { if (dict.TryGetValue(key, out value)) return value; string newValue = “value of ” + key; // place long operation here dict.Add(key, newValue); return newValue; } […]

在Xamarin.Forms中使用Thread.Sleep

我想执行以下操作 MainPage = new ContentPage { Content = new StackLayout { Children = { new Button { Text = “Thread.Sleep”, Command = new Command(() => { Thread.Sleep(1000); MainPage.Animate(“”, x => MainPage.BackgroundColor = Color.FromRgb(x, x, x)); }), }, new Button { Text = “Task.Run + Thread.Sleep”, Command = new Command(async () => { await Task.Run(() => […]

C#秒表显示错误的时间

我看过其他用户post显示秒表测量在“Thread.Sleep(5000)”中花费的时间约为5000毫秒。 但是我的程序会产生以下结果 for (int i = 0; i < 20; ++i) { Stopwatch sw = Stopwatch.StartNew(); DateTime start = DateTime.Now; Thread.Sleep(5000); sw.Stop(); Console.Out.WriteLine( "StopWatch Diff:" + sw.ElapsedMilliseconds.ToString()); Console.Out.WriteLine( "DateTime Diff:" + DateTime.Now.Subtract(start).TotalMilliseconds.ToString()); } 秒表差异:1684 DateTime Diff:5262.592 秒表差异:1625 DateTime Diff:4997.12 秒表差异:1604 DateTime Diff:4997.12 秒表差异:1601 DateTime Diff:4997.12 秒表差异:1690 DateTime Diff:4997.12 秒表差异:1603 只是我在观察这种行为吗? 为什么秒表在实际经过5秒后测量为1.6秒。 这是线程实际运行的时间?

如何在用户注册期间添加声明

我正在使用带有身份2.1.0和VS2013 U4的ASP.NET MVC 5项目。 我想在注册期间向用户添加声明,以便存储在db中。 这些声明代表用户自定义属性。 当我为管理员创建一个用于创建/编辑/删除用户的网页时,我仍然使用AccountController create方法创建用户,但我不想登录该用户。 如何将这些声明添加到用户?

log4net输出文件但不是调试窗口

我正在尝试从错误中获取输出,以便在附加的日志文件中以及调试窗口中显示。 日志文件的内容工作正常,但调试窗口中没有显示任何内容。 首先,这是我的配置 然后我在我的代码中调用log4net log.Debug(“Debug error logging”, ex); log.Info(“Info error logging”, ex); log.Warn(“Warn error logging”, ex); log.Error(“Error error logging”, ex); log.Fatal(“Fatal error logging”, ex); 这会在我的日志文件中创建5个条目,但在我的控制台窗口中没有条目。 我也修改了我的web.config,所以appender尽可能相似,但我仍然得到完全相同的结果 关于我可能错过的任何想法都打破了控制台输出? 编辑: 找到了解决方案,正如下面的评论中指出的那样,make3。 我混淆了控制台appender和跟踪appender,这是我实际上正在寻找的。 这是更新的配置。

MimeKit:如何嵌入图像?

我正在使用MailKit / MimeKit 1.2.7(最新的NuGet版本)。 我尝试通过API文档中的示例(“使用BodyBuilder”部分)将图像嵌入到我的电子邮件的HTML正文中。 我当前的代码如下所示: var builder = new BodyBuilder(); builder.HtmlBody = @”Hey!”; var pathImage = Path.Combine(Misc.GetPathOfExecutingAssembly(), “Image.png”); builder.LinkedResources.Add(pathLogoFile); message.Body = builder.ToMessageBody(); 我可以发送此电子邮件,实际上图像已附加到电子邮件中。 但它没有嵌入。 我错过了什么吗? 或者这是Apple Mail的错(这是我用来接收电子邮件的电子邮件客户端)? 我很感激任何想法(并非常感谢Jeffrey Stedfast提供这么棒的工具集!!)。 英格玛

空条件运算符和!=

通过在C#中引入Null-Conditional Operators ,进行以下评估, if (instance != null && instance.Val != 0) 如果我这样改写, if (instance?.Val != 0) 如果instance是null引用,它将被计算为true ; 它表现得像 if (instance == null || instance.Val != 0) 那么使用这种新语法重写评估的正确方法是什么? 编辑: instance是从JSON反序列化的大对象的字段。 有很多这样的代码,首先检查字段是否在JSON中,如果是,检查Val属性是否不等于常量,只有两个条件都为真,做一些操作。 代码本身可以被重构,以使逻辑流程更加“有意义”,正如彼得在他的评论中指出的那样,尽管在这个问题中我对如何使用带有null-conditional operators感兴趣!= 。

自定义validation属性MVC2

我有一个自定义validation属性,它检查两个属性是否具有相同的值(如密码和重新键入密码): [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)] public class EqualToPropertyAttribute : ValidationAttribute { public string CompareProperty { get; set; } public EqualToPropertyAttribute(string compareProperty) { CompareProperty = compareProperty; ErrorMessage = string.Format(Messages.EqualToError, compareProperty); } public override bool IsValid(object value) { if (value == null) { return true; } PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value); var property = properties.Find(CompareProperty, true); […]

使用Process实时控制台输出重定向

我正在使用VBOXMANAGE来“导出”客户机。 VBOXManage是一个控制台应用程序,可以控制来宾主机的来宾行为。 由于export命令是一个很长的进程,它返回进程更新,如下所示: 0%… 10%… 20%… 30%… 100% 我正在编写一个C#应用程序,它将使用Process调用VBOXManage。 这是我的代码: Process VBOXProc = new Process(); VBOXProc.StartInfo.FileName = VBOXMANAGE; VBOXProc.StartInfo.Arguments = Arguments; VBOXProc.StartInfo.UseShellExecute = false; VBOXProc.StartInfo.CreateNoWindow = true; VBOXProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; VBOXProc.StartInfo.RedirectStandardError = true; VBOXProc.StartInfo.RedirectStandardOutput = true; VBOXProc.OutputDataReceived += new DataReceivedEventHandler(VBOXProc_OutputDataReceived); VBOXProc.ErrorDataReceived += new DataReceivedEventHandler(VBOXProc_ErrorDataReceived); VBOXProc.EnableRaisingEvents = true; VBOXProc.Start(); VBOXProc.BeginOutputReadLine(); VBOXProc.BeginErrorReadLine(); VBOXProc.WaitForExit(); 这很好,除了每个LINE读取输出。 这意味着过程更新“0%… 10%… 20%… […]