Tag: C#的

为什么这个C#代码返回它所做的

有人可以帮我理解为什么这段代码片段返回“Bar-Bar-Quux”? 即使阅读了界面,我也很难理解这一点。 interface IFoo { string GetName(); } class Bar : IFoo { public string GetName() { return "Bar"; } } class Baz : Bar { public new string GetName() { return "Baz"; } } class Quux : Bar, IFoo { public new string GetName() { return "Quux"; } } class Program { static void […]

为什么.NETexception不被try / catch块捕获?

我正在使用C#的ANTLRparsing器库进行项目工作。 我已经build立了一个语法来parsing一些文本,它运作良好。 但是,当parsing器遇到非法或意外的令牌时,会抛出许多exception之一。 问题是,在某些情况下(不是全部),我的try / catch块不会捕获它,而是停止执行作为未处理的exception。 我的问题是,我不能在其他地方复制这个问题,但在我的完整代码。 调用堆栈显示exception肯定发生在我的try / catch(Exception)块中。 我唯一能想到的是在我的代码和引发exception的代码之间发生了几个ANTLR程序集调用,而且这个库没有启用debugging,所以我不能一步一步地完成它。 我不知道如果不可debugging程序集抑制exception冒泡? 调用堆栈看起来像这样; 外部程序集调用在Antlr.Runtime: Expl.Itinerary.dll!TimeDefLexer.mTokens()1213行C# Antlr3.Runtime.dll!Antlr.Runtime.Lexer.NextToken()+ 0xfc字节 Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.FillBuffer()+ 0x22c字节 Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.LT(int k = 1)+ 0x68字节 Expl.Itinerary.dll!TimeDefParser.prog()第109行+ 0x17字节C# Expl.Itinerary.dll!Expl.Itinerary.TDLParser.Parse(string Text =“”,Expl.Itinerary.IItinerary Itinerary = {Expl.Itinerary.MemoryItinerary})Line 17 + 0xa bytes C# 来自Parse()中最底层调用的代码片段如下所示: try { // Execution stopped at parser.prog() TimeDefParser.prog_return prog_ret = parser.prog(); return prog_ret == null ? null […]

C#与可选方法的接口

我明白,接口是合同,任何改变(甚至增加)打破任何相关的代码。 然而,我可以发誓我读了一段时间后,最近的.NET版本(3,3.5 ??)添加了一个新的属性,可以应用到新的接口成员。 该属性允许版本化和/或使成员可选。 它会是这样的: interface ITest { void MethodOne(); [InterfaceVersion(2)] void MethodTwo(); } 我已经看到这个高低,但似乎无法find它。 我想知道,我是不是误解了我认为自己读过的东西,而没有这样的东西。 有人有任何见解吗?

禁用在WPF DataGrid中select

如何禁用在WPFTooklit的DataGridselect? 我尝试修改为ListView (从WPF ListViewclosuresselect )工作的解决scheme,但不起作用: <tk:DataGrid> <tk:DataGrid.ItemContainerStyle> <Style TargetType="{x:Type tk:DataGridRow}"> <Setter Property="Focusable" Value="false"/> </Style> </tk:DataGrid.ItemContainerStyle> <tk:DataGrid.CellStyle> <Style TargetType="{x:Type tk:DataGridCell}"> <Setter Property="Focusable" Value="false"/> </Style> </tk:DataGrid.CellStyle> </tk:DataGrid>

Windows / C ++:是否有可能findexception被抛出的代码行有“Exception Offset”

我们的一位用户在我们的产品启动时出现exception情况。 她从Windows向我们发送了以下错误消息: Problem Event Name: APPCRASH Application Name: program.exe Application Version: 1.0.0.1 Application Timestamp: 4ba62004 Fault Module Name: agcutils.dll Fault Module Version: 1.0.0.1 Fault Module Timestamp: 48dbd973 Exception Code: c0000005 Exception Offset: 000038d7 OS Version: 6.0.6002.2.2.0.768.2 Locale ID: 1033 Additional Information 1: 381d Additional Information 2: fdf78cd6110fd6ff90e9fff3d6ab377d Additional Information 3: b2df Additional Information 4: a3da65b92a4f9b2faa205d199b0aa9ef […]

什么时候适合使用KnownType属性?

阅读MSDN参考后,我仍然有关于何时使用KnownType属性的问题。 我知道该属性传递types信息到序列化程序,但是什么时候需要? 当被序列化的类引用了一个基类types,并且有可以被设置为那些引用的向上派生类时是否合适? 而且,过度使用这个属性有什么缺点吗? 例如,在前面的例子中,如果序列化类被标记了KnownType(baseClass),即使有一个明确的引用types?

c#/。net 3.5字典是如何实现的?

我正在使用一个应用程序,它使用了大量的大型字典(最多10 ^ 6个元素),其大小是事先未知的(尽pipe我可以猜到在某些情况下)。 我想知道字典是如何实现的,即如果我不给出字典大小的初始估计,效果会有多糟糕。 它是否以List的方式在内部使用(自增长)数组? 在这种情况下,让字典增长可能会在LOH上留下很多大的未引用数组。

如何unit testing返回JsonResult的Action方法?

如果我有这样的控制器: [HttpPost] public JsonResult FindStuff(string query) { var results = _repo.GetStuff(query); var jsonResult = results.Select(x => new { id = x.Id, name = x.Foo, type = x.Bar }).ToList(); return Json(jsonResult); } 基本上,我从我的仓库中获取东西,然后将其投影到匿名types的List<T>中。 我如何进行unit testing? System.Web.Mvc.JsonResult有一个名为Data的属性,但是它的types是object ,正如我们所期望的那样。 那么这是否意味着如果我想testingJSON对象具有我期望的属性(“id”,“name”,“type”),我必须使用reflection? 编辑: 这是我的testing: // Arrange. const string autoCompleteQuery = "soho"; // Act. var actionResult = _controller.FindLocations(autoCompleteQuery); // Assert. Assert.IsNotNull(actionResult, […]

抽象方法和纯虚函数是一回事吗?

据我所知,抽象方法和纯虚函数都不提供任何function……所以我们可以说它们都是同一个东西? 另外,假设一个类(不一定声明为抽象)包含一些实现的方法(不是抽象的或虚拟的),而是包含一个纯虚函数。 这个课是抽象的吗?

何时需要“typename”关键字?

可能重复: 官方,什么是typename? 我在哪里以及为什么必须放置模板和types名关键字? 考虑下面的代码: template<class K> class C { struct P {}; vector<P> vec; void f(); }; template<class K> void C<K>::f() { typename vector<P>::iterator p = vec.begin(); } 为什么在这个例子中需要“typename”关键字? 还有其他的情况下,必须指定“typename”吗?