Tag: .net

构建C#EntityFramework IQueryable表达式时出现问题

所以我正在尝试构建一个半复杂的搜索表达式,但我不得不尝试创建一个基本的。 用于getValueExpression的表达式如下所示: x => x.PropertyA != null ? x.PropertyA.ToShortDateString() : “” //nullable datetime x => x.PropertyB //string property x => x.PropertyC != null x.PropertyC.ToString() : “” //nullable int 这是我的函数代码,当getValueExpression属于Func类型时,它当前是错误的,无法与字符串进行比较,这非常有意义,我理解为什么会这样,但是我无法弄清楚如何制作一个表达式获取getValueExpression的值以与要搜索的值进行比较。 任何帮助或领导正确的方向将不胜感激。 public static IQueryable Search(this IQueryable source, Expression<Func> getValueExpression, string searchOption, string searchValue) { var searchValueExpression = Expression.Constant(searchValue); var comparisonExpression = Expression.Equal(getValueExpression, searchValueExpression); var lambdaExpression = […]

使用强命名程序集中定义的旧版本接口创建客户端激活对象时的System.InvalidCastException

我有一个关于.Net Remoting,版本控制和创建客户端激活对象的查询。 这是场景: 有2个接口,驻留在它们自己的程序集“SharedTypes”中:IServer和IAccount。 IServer包含返回字符串的方法“GetStatus”和返回IAccount类型的“CreateAccount”。 这是作为v1.0.0.0注册到GAC中的。 服务器应用程序引用SharedTypes并使用具体类Server和Account实现IServer和IAccount。 这些是MarshalByRefObject对象。 Server应用程序将Server类编组为单例对象。 客户端应用程序引用SharedTypes并成功通过IServer接口连接到可远程服务器对象。 在这里,我可以成功调用GetStatus和CreateAccount(它返回一个客户端激活的对象)。 到目前为止一切都好。 现在我将SharedTypes的版本增加到v2.0.0.0并注册到GAC,删除旧的v1.0.0.0版本。 Server应用程序是针对此版本构建的,但客户端不是。 现在,当我运行客户端应用程序时,它会按预期抱怨System.IO.FileNotFoundException,即它无法在GAC中找到v1.0.0.0的SharedTypes。 如果我在客户端的exe目录中复制SharedTypes的v1.0.0.0,则客户端应用程序最终会绑定到此(在GAC查找失败后)。 客户端应用程序启动,我可以成功调用IServer对象上的GetStatus(通过单例对象)。 但是,如果我调用CreateAccount – 它应该返回一个客户端激活的对象,我会得到以下exception: System.InvalidCastException: Return argument has an invalid type. at System.Runtime.Remoting.Proxies.RealProxy.ValidateReturnArg(Object arg, Type paramType) at System.Runtime.Remoting.Proxies.RealProxy.PropagateOutParameters(IMessage msg, Object[] outArgs, Object returnValue) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at SharedTypes.IServer.GetAccount() 我的问题是为什么在服务器上调用GetStatus从客户端(使用v1.0.0.0)激活单例对象不会抛出此exception,而通过CreateAccount创建客户端激活对象呢? 由于这两种类型都是在服务器上创建的,我认为GetStatus调用会产生相同的exception吗?

计算文本文件中特定单词的频率

我有一个文本文件存储为字符串变量。 处理文本文件,使其仅包含小写单词和空格。 现在,假设我有一个静态字典,它只是一个特定单词列表,我想从文本文件中计算字典中每个单词的频率。 例如: Text file: i love love vb development although ima total newbie Dictionary: love, development, fire, stone 我想看到的输出类似于以下内容,列出字典单词及其计数。 如果它使编码更简单,它也只能列出文本中出现的字典单词。 =========== WORD, COUNT love, 2 development, 1 fire, 0 stone, 0 ============ 使用正则表达式(例如“\ w +”)我可以获得所有单词匹配,但我不知道如何获得也在字典中的计数,所以我被卡住了。 效率在这里至关重要,因为字典非常大(~100,000个单词),文本文件也不小(每个~200kb)。 我感谢任何帮助。

C#电子邮件地址validation

我想澄清一件事。 根据客户端请求,我们必须创建一个正则表达式,以便它允许在电子邮件地址中使用撇号。 我的问题根据RFC标准,电子邮件地址是否包含aportrophe? 如果是这样,如何重新创建正则表达式以允许撇号 ?

“ref”关键字和引用类型

我的团队中的某个人偶然发现了引用类型上ref关键字的特殊用法 class A { /* … */ } class B { public void DoSomething(ref A myObject) { // … } } 是否有人理智会做这样的事情? 我在C#中找不到这个用途

试图理解C#中的exception

我在代码中并没有真正使用任何try / catches,但我试图打破这种习惯,现在开始使用exception。 我认为在我的应用程序中最重要的地方是阅读文件而我现在正在尝试实现它,但我不确定这样做的“最佳实践”。 目前我正在做这样的事情: private void Parse(XDocument xReader) { IEnumerable person = xReader.Descendants(“Person”).Elements(); foreach (XElement e in person) personDic[e.Name.ToString()] = e.Value; if (personDic[“Name”] == null || personDic[“Job”] == null || personDic[“HairColor”] == null) throw new KeyNotFoundException(“Person element not found.”); } 但我不确定这是否正确。 我有这个来处理它: try { personsReader.Read(filename, persons); } catch (KeyNotFoundException e) { MessageBox.Show(e.Message); return; } […]

客户服务器套接字C#

我正在使用socket C#。 我已经使用socket实现了客户端服务器应用程序,但问题是客户端没有收到服务器发送的所有数据。 这是客户端应用程序代码。 我应该怎么做才能收到服务器发送的所有数据? strRecieved = “”; Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(“127.0.0.1”), 9001); soc.Connect(endPoint); byte[] msgBuffer = Encoding.Default.GetBytes(path); soc.Send(msgBuffer, 0, msgBuffer.Length, 0); byte[] buffer = new byte[2000]; int rec = soc.Receive(buffer); strRecieved = String.Format(Encoding.Default.GetString(buffer));

如何在ASP.NET中动态创建新的超链接?

我将解释我想要实现的目标: 我希望有一种情况,我可以通过在后面的代码中的循环中创建它们来创建任意数量的控件。 我可以在使用PHP时通过混合PHP代码和HTML代码来实现这一点。 这允许我动态生成实际的HTML标签。 在ASP.NET中,我还没有找到复制此function的方法。 我已经考虑过在代码中使用一个类似于Init()函数的循环来创建一个new()对象数组,设置它们的属性并希望它被传递到aspx文件中,但它不起作用。 我该怎么做呢?

Process.Start权限问题

我正在尝试使用Process.Start从C#运行外部问题,但遇到了权限问题。 当我正常打开命令提示符(而不是管理员)并运行我的命令时,它们工作正常,但是当我通过Process.Start打开命令提示符时,我在目录上收到写入错误。 (“我不能写文件test.log”) 如果我通过Process.Start以管理员身份运行它可以正常工作,但我获得了权限弹出窗口。 有没有人有任何想法可以帮我解决这个问题? 谢谢! 这是我正在使用的代码: Process proc = new Process(); proc.StartInfo.FileName = @”cmd.exe”; proc.StartInfo.Arguments = @”/k latex C:\Users\Shane\Documents\test.tex”; proc.Start(); proc.WaitForExit();

TCP消息损坏

我有一个简单的TCP服务器,通过GPRS与一些设备通信。 它长时间正常工作没有任何问题。 现在,设备(客户端设备,发送数据)发生了变化,并且它们发送的数据比以前多得多,TCP消息大小可能比之前大10倍。 早先它是最大1024字节/数据消息,现在它可以超过1万字节/消息。 正如我所看到的 – 正如TCP所预测的那样 – 有许多消息被“破坏”,所以不是完整的消息,只有一部分到达,后来可以到另一部分等。 我认为我的服务器 – 基于异步模式 – 以错误的方式处理这种情况,我认为该错误在我的RecieveCallBack函数中。 我找不到正确处理这种情况的方法。 我怎样才能做到这一点? 这是我的RecieveCallBackfunction: public void RecieveCallBack(IAsyncResult ar) { StateObject state = (StateObject)ar.AsyncState; try { Socket handler = state.WorkSocket; int read = handler.EndReceive(ar); if (read > 0) { var data = new byte[read]; Array.Copy(state.Buffer, 0, data, 0, read); } else { if […]