Tag: c#

c#表达式中的闭包变量捕获问题

我有一个使用表达式树创建委托的函数。 在这个表达式中,我使用从传入函数的多个参数中捕获的变量。 实际的表达式树相当大,例如: Delegate GenerateFunction(T current, IList parents) { var currentExpr = Expression.Parameter(typeof(T), “current”); var parentsExpr = Expression.Parameter(parents.getType(), “parents”); var parameters = new List(); …. return Expression.Lambda(Expression.Block(new List { parentsExpr, currentExpr }, ….), parameters.ToArray()).Compile(); } 然后,我在将该函数传递给另一个要使用的函数之前,从另一个方法调用此方法。 完成所有操作后,我想访问在表达式树中更新的父项内容。 一切似乎都在编译,我的表达式看起来还不错,但是当我运行它时,我出现(虽然我不能确定)在访问parent变量时(在表达式/闭包内)获取空引用exception。 我想我想知道我做错了什么,或者这是否可行,以及了解发生了什么的提示。 我似乎无法在方法中找到任何悬挂的(?)局部变量,所以我想知道它们是否被捕获了? 谢谢,马克

好的做法是在方法中多使用一个RETURN语句吗?

可能重复: 为什么在方法结束时返回是一种好习惯 我想知道是否可以认为好的做法在方法中使用几个RETURN语句以及为什么。 如果没有,我想知道如何以不同的方式重写代码。 public string GetNominativeById(int? candidateId) { if (candidateId.HasValue) return repepositoryCandidate.GetById(candidateId.Value).Nominative; else return string.Empty; } } 有一个返回 public string GetNominativeById(int? candidateId) { string result; if (candidateId.HasValue) result = repepositoryCandidate.GetById(candidateId.Value).Nominative; else result = string.Empty; return result; } }

在C#中以函数方式遍历树

在c#,Traverse中考虑以下扩展方法: IEnumerable Traverse( this IEnumerable source, Func<T, IEnumerable> fnRecurse ); 此方法允许通过T定义的树递归,并且任何函数都会导致T返回其子节点。 现在考虑以下T的实现: class Node { public string Name; public List Children; } 我的目标是编写可能的最短函数,它将返回包含此树中每个节点的完全限定路径的IEnumerable。 就像是: var node = GetParentNode(); return node.Traverse( node => node.Children ) .Select( node => GetParentName(node) + “:” + node.Name ); 显然,向Node添加Parent属性会使问题变得微不足道。 相反,我想以某种方式在仿函数中构建我的父字符串。 我不认为这在C ++中会太难,但我不知道如何在C#中做到这一点。 有任何想法吗?

C#全屏控制台?

我已经看到Windows在更新video驱动程序时可以切换到非常基本的控制台界面,我也看到像Borland C ++这样的程序。 我真的很想知道如何使用C#中的控制台应用程序(或者如果你愿意的话,还可以使用VB.NET),我不介意使用P / Invoke(我打赌我必须!)。

C#覆盖公共成员并将其设为私有

可能? 你能改变任何 东西的访问权限吗?

为什么未自动初始化未分配的局部变量?

似乎没有办法在代码中使用未分配的局部变量或检查它们,因为编译器吐出Use of unassigned local variable错误。 为什么编译器在编译时不对这些变量使用default(T) ? 即使对值类型更难做,在这种情况下,引用类型也可以很容易地初始化为null ,对吧? 这是一些测试代码: public void Test ( ) { int x; string s; if ( x == 5 ) Console.WriteLine ( 5 ); if ( s != null ) Console.WriteLine ( “s” ); } 返回: Use of unassigned local variable ‘x’ Use of unassigned local variable ‘s’ 更新: […]

XML反序列化到XSD生成的类中的麻烦

我有一个相当详细的xml文件。 下面是顶级节点(我已经包含了椭圆,因为较低级别的节点都已经很好地形成并且正确地填充了数据): … … 我使用Visual Studio 2008命令提示符创建了一个xsd文件: xsd sample.xml 这会很好地生成xsd文件。 然后我使用以下命令从xsd自动生成类: xsd sample.xsd /classes 为了将xml文件反序列化为类对象,我在helper类中使用了read函数: public class XmlSerializerHelper { public Type _type; public XmlSerializerHelper() { _type = typeof(T); } public void Save(string path, object obj) { using (TextWriter textWriter = new StreamWriter(path)) { XmlSerializer serializer = new XmlSerializer(_type); serializer.Serialize(textWriter, obj); } } public T Read(string […]

如何将SQL日期转换为DateTime?

我的SQL数据库中有一个包含date类型的列。 如何将其转换为C# DateTime ,然后再转换回SQL date ?

合并ObservableCollection

我有两个ObservableCollections,我需要在一个ListView控件中一起显示它们。 为此,我创建了MergedCollection,它将这两个集合显示为一个ObservableCollection。 这样我就可以将ListView.ItemsSource设置为我的合并集合,并列出两个集合。 添加工作正常,但当我尝试删除项目时,显示未处理的exception: An unhandled exception of type ‘System.InvalidOperationException’ occurred in PresentationFramework.dll Additional information: Added item does not appear at given index ‘2’. MergedCollection的代码如下: public class MergedCollection : IEnumerable, INotifyCollectionChanged { ObservableCollection nodes; ObservableCollection connections; public MergedCollection(ObservableCollection nodes, ObservableCollection connections) { this.nodes = nodes; this.connections = connections; this.nodes.CollectionChanged += new NotifyCollectionChangedEventHandler(NetworkNodes_CollectionChanged); this.connections.CollectionChanged += new […]

我的ASP.NET应用程序如何从web.config自动获取SMTP设置?

我注意到我们总是这样: SmtpClient mSmtpClient = new SmtpClient(); // Send the mail message mSmtpClient.Send(mMailMessage); 并且设置凭据的唯一位置是web.config: 所以我的问题是,它是如何自动解决的?