自从我第一次开始学习面向对象编程以来,我一直在努力解决这个问题:如何在"正确的"OOP代码中实现记录器?
通过这个,我的意思是一个对象,它有一个方法,我们希望代码中的每个其他对象都能够访问; 这个方法将输出到console/file/whatever,我们将用于记录 - 因此,这个对象将是logger对象.
我们不想将logger对象建立为全局变量,因为全局变量很糟糕,对吧?但是我们也不希望在每个单个对象中调用的每个方法的参数中都传递logger对象.
在大学里,当我把它带到教授那里时,他实际上无法给我一个答案.我意识到实际上有可能实现此功能的包(例如Java).然而,我最终要寻找的是如何正确地以OOP方式实现这一点的知识.
我希望Ruby on Rails中的JSON输出"漂亮"或格式良好.
现在,我打电话to_json,我的JSON全部在一条线上.有时,如果JSON输出流中存在问题,则很难看到.
有没有办法配置或方法使我的JSON在Rails中"漂亮"或格式良好?
Dijkstra的Shunting Yard算法用于解析中缀表示法并生成RPN输出.
我正在寻找相反的方法,将RPN转换为highschool-math-class样式中缀表示法,以便从数据库中表示RPN表达式,以便以可理解的方式为用户提供服务.
请节省您的时间,不要自己做算法,只需指出我似乎无法找到的教科书示例.从Shunting Yard算法向后工作并使用我对符号的了解,我可能能够找到解决方案.我只是在寻找快捷方式,所以我不需要重新发明轮子.
哦,请不要将此标记为"作业",我发誓我已经不在学校了!;-)
我很难尝试调试LINQ to SQL并提交更改.
我一直在使用http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx,它非常适合调试简单查询.
我在我的项目的DataContext类中使用我的应用程序中的以下代码段:
JobMaster newJobToCreate = new JobMaster();
newJobToCreate.JobID = 9999
newJobToCreate.ProjectID = "New Project";
this.UpdateJobMaster(newJobToCreate);
this.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
当我运行this.SubmitChanges时,我会发现一些非常奇怪的例外;
Index was outside the bounds of the array.
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪进入我无法进入的位置:
at System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k)
at System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[] keyValues)
at System.Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType type, Object[] keyValues)
at System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type, Object[] keyValues)
at System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc, Object instance)
at System.Data.Linq.ChangeProcessor.BuildEdgeMaps()
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
at JobTrakDataContext.CreateNewJob(NewJob job, String userName) in D:\JobTrakDataContext.cs:line 1119
Run Code Online (Sandbox Code Playgroud)
有没有人有他们使用的工具或技术?我错过了一些简单的事吗?
编辑:我使用Slace的建议设置.net调试,但.net 3.5代码尚不可用:http://referencesource.microsoft.com/netframework.aspx
EDIT2:根据sirrocco的建议,我已经改为InsertOnSubmit,仍然会出现同样的错误. …
我们的ASP.NET应用程序必须能够将Web内容导出为PDF和Word文档.
在过去,我们使用Aspose的库来实现这一目标,但我们发现它们在文档构建方面有点过于低级.例如,我们发现自己需要使用形状基元来编写基于点的函数来创建项目符号列表.
最佳案例场景 - 我们在我们可打印的CSS样式页面上指出一个工具,并自动获取包含以相同方式设置样式的相同内容的PDF或Word文档.
您是否有过使用任何可以实现此目标的工具的良好经验?
我有以下类型:
// incomplete class definition
public class Person
{
private string name;
public string Name
{
get { return this.name; }
}
}
Run Code Online (Sandbox Code Playgroud)
我希望使用某种专用控制器/构建器创建和更新此类型,但我希望它对其他类型保持只读.
每次由控制器/构建器更新事件时,此对象还需要触发事件.
总结一下,根据以前的类型定义骨架:
Person只能通过特定的控制器被实例化Person(name字段)的状态Person需要一个发送通知到世界其他地方发生时Person属性我该如何实现呢?我在这里谈论的是控制器/构建器,但欢迎所有其他解决方案.
注意:我可以依赖internal修饰符,但理想情况下我的所有东西都应该在同一个程序集中.
我常常发现自己以某种方式与文件进行交互,但在编写代码后,我总是不确定它实际上是多么糟糕.问题是我不完全确定文件相关操作如何失败,因此是处理预期的最佳方法.
简单的解决方案似乎只是捕获代码抛出的任何IOExceptions并为用户提供"无法访问的文件"错误消息,但是可以获得更细粒度的错误消息.有没有办法确定这些错误之间的差异,如文件被另一个程序锁定,以及由于硬件错误而无法读取的数据?
鉴于以下C#代码,您将如何处理用户友好(尽可能提供信息)方式的错误?
public class IO
{
public List<string> ReadFile(string path)
{
FileInfo file = new FileInfo(path);
if (!file.Exists)
{
throw new FileNotFoundException();
}
StreamReader reader = file.OpenText();
List<string> text = new List<string>();
while (!reader.EndOfStream)
{
text.Add(reader.ReadLine());
}
reader.Close();
reader.Dispose();
return text;
}
public void WriteFile(List<string> text, string path)
{
FileInfo file = new FileInfo(path);
if (!file.Exists)
{
throw new FileNotFoundException();
}
StreamWriter writer = file.CreateText();
foreach(string line in text)
{
writer.WriteLine(line);
}
writer.Flush();
writer.Close();
writer.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud) 说我有两个字符串,
String s1 = "AbBaCca";
String s2 = "bac";
Run Code Online (Sandbox Code Playgroud)
我想执行一个s2包含在其中的检查返回s1.我可以这样做:
return s1.contains(s2);
Run Code Online (Sandbox Code Playgroud)
我很确定这contains()是区分大小写的,但是我无法通过阅读文档来确定这一点.如果是,那么我想我最好的方法是这样的:
return s1.toLowerCase().contains(s2.toLowerCase());
Run Code Online (Sandbox Code Playgroud)
除此之外,还有另一种(可能更好的)方法来实现这一目标而不关心区分大小写吗?
我正在设计一个网站导航层次结构.它是节点树.节点代表网页.
树上的一些节点是特殊的.我需要一个名字给他们.
有多个这样的节点.每个子树都是子树的"根",页面具有不同的徽标,样式表或布局.想想不同的部门.
带有颜色编码的子树的站点地图http://img518.imageshack.us/img518/153/subtreesfe1.gif
我应该为这种类型的节点命名什么?
如果用户选择.NET 2.0 ListView中的所有项目,ListView将为每个项目触发SelectedIndexChanged事件,而不是触发事件以指示选择已更改.
如果用户然后单击以选择列表中的一个项目,则ListView将为未选中的每个项目触发SelectedIndexChanged事件,然后为单个新选择的项目触发SelectedIndexChanged事件,而不是触发事件以指示选择已经改变.
如果您在SelectedIndexChanged事件处理程序中有代码,当您开始在列表中有几百/千个项目时,程序将变得非常无响应.
我考虑过停留计时器等.
但有没有人有一个很好的解决方案,以避免成千上万的不必要的ListView.SelectedIndexChange事件,什么时候真的会有一个事件呢?