小编MJ *_*son的帖子

为什么.NET异常没有被try/catch块捕获?

我正在使用针对C#的ANTLR解析器库开发一个项目.我已经构建了一个语法来解析一些文本,它运行良好.但是,当解析器遇到非法或意外的令牌时,它会抛出许多异常中的一个.问题是在某些情况下(并非所有)我的try/catch块不会捕获它而是将执行作为未处理的异常停止.

问题在于我无法在其他任何地方复制此问题,而是在我的完整代码中.调用堆栈显示异常肯定发生在我的try/catch(Exception)块中.我唯一能想到的是,在我的代码和引发异常的代码之间发生了一些ANTLR程序集调用,而且这个库没有启用调试,所以我无法单步执行它.我想知道不可调试的程序集是否会抑制异常冒泡?调用堆栈看起来像这样; 外部程序集调用在Antlr.Runtime中:

    Expl.Itinerary.dll!TimeDefLexer.mTokens() Line 1213 C#
    Antlr3.Runtime.dll!Antlr.Runtime.Lexer.NextToken() + 0xfc bytes 
    Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.FillBuffer() + 0x22c bytes   
    Antlr3.Runtime.dll!Antlr.Runtime.CommonTokenStream.LT(int k = 1) + 0x68 bytes
    Expl.Itinerary.dll!TimeDefParser.prog() Line 109 + 0x17 bytes   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 : prog_ret.value;
     }
     catch (Exception ex) {
        throw new ParserException(ex.Message, ex);
     }
Run Code Online (Sandbox Code Playgroud)

对我来说,一个catch(Exception)子句应该捕获任何异常.有什么理由不这样做吗?

更新:我使用Reflector跟踪外部组件,没有发现任何线程的证据.该程序集似乎只是ANTLR生成的代码的运行时实用程序类.引发的异常来自TimeDefLexer.mTokens()方法,其类型为NoViableAltException,它派生自RecognitionException - > …

.net c# antlr exception

45
推荐指数
4
解决办法
6万
查看次数

GetHashCode(key)&int.MaxValue

Dictionary<TKey, TValue>在mscorlib.dll中浏览泛型类的实现时,我注意到以下用了很多次来获取哈希键:

int num = this.comparer.GetHashCode(key) & int.MaxValue;
Run Code Online (Sandbox Code Playgroud)

GetHashCode()返回一个int.我错误地认为int.MaxValue和任何整数x之间的按位AND 将始终返回x

有人可以解释为什么以上述方式使用&运算符?

.net c#

7
推荐指数
1
解决办法
1547
查看次数

Google Earth API中基于地区的网络链接

我有许多大型KML数据集,它们使用基于区域的网络链接层次结构来提供服务; 如KML参考中所述:

将Regions与NetworkLinks结合使用,可以创建指针层次结构,每个指针指向一个特定的子区域.如<viewRefreshMode>以下KML文件所示,具有onRegion选项,该选项指定仅在Region处于活动状态时加载Region数据.如果为嵌套区域提供多个详细级别,则仅当用户的视点触发下一个加载时才会加载更大量的数据.

这在Google地球中加载时效果很好.

我现在希望使用Google Earth插件在应用程序中加载这些内容. 我需要通过Google Earth API访问加载的内容 ; (即附加单击事件,更改样式)以将内容集成到应用程序中.

问题是,我没有找到任何关于网络链接的"有载"事件的参考.在我看来,这将起作用的方式是:

  • 通过API加载顶级网络链接,附加一个回调函数,该函数将在加载网络链接时调用.
  • 在回调函数中,解析网络链接返回的KML.对于区域层次结构中的中间级别,此KML将仅包含指向下一个区域级别的网络链接.通过API将它们加载到插件中,再次指定相同的回调函数,当加载它们时(即当它们的区域变得可见时)将调用它.
  • 最终,返回的KML将包含实际的"内容".在此阶段,我们在执行任何所需的修改(例如附加事件监听器,设置样式等)之后将实际内容(即地标)加载到插件中.

我认为javascript看起来像下面这样.
请注意:这只是一个草图,可能有助于理解我的问题.不是问为什么这段代码不起作用.

//create network link
var networkLink = ge.createNetworkLink("");
networkLink.setName("Regionated hierarchy root");

// create a Link object
//the network-links contained in the kml that will be returned in this file
//are region-based; they will only be loaded when the user zooms into the relevant
//region. 
var link = ge.createLink("");
link.setHref("http://foo.com/regionatedRoot.kml");

// attach the Link to the …
Run Code Online (Sandbox Code Playgroud)

kml google-earth-plugin

6
推荐指数
1
解决办法
912
查看次数

重用 IBM.WMQ.MQQueue 对象

我们将 .NET API 用于 IBM 的 WebSphere MQ。

创建 MQQueueManager 对象显然是一项昂贵的操作,因此我们缓存并重用这些对象的池。

目前,对于每个请求,我们访问所需的队列:

//obtain queueManager from pool
IBM.WMQ.MQQueue requestQ= queueManager.AccessQueue(requestQName, mqOptions);
IBM.WMQ.MQQueue responseQ= queueManager.AccessQueue(responseQName, mqOptions);
Run Code Online (Sandbox Code Playgroud)

完成后关闭它们:

requestQ.Close();
responseQ.Close();
Run Code Online (Sandbox Code Playgroud)

这是最佳实践,还是我们也应该池化和重用 MQQueue 对象(除了队列管理器)?AccessQueue() 似乎是客户端上的廉价操作。

.net ibm-mq

5
推荐指数
1
解决办法
1641
查看次数

根据单击的按钮将相同的表单发布到不同的操作

我在StackOverflow上有类似的帖子,但也许我的误解更为重要.我有一个动作索引()和索引视图的渲染.从Index()视图取决于单击的按钮[HttpPost]索引()或[HttpPost] Search()必须被调用因为我发布了一些数据.发布到不同操作的唯一方法是使用jQuery吗?如果jQuery是唯一的方法,如果我的操作返回视图(完整的Html页面),我必须从$ .post清理整个文档元素并用我的视图html填充它?我对这一切都很陌生,非常感谢!

@using (Html.BeginForm())
{
    <input name="startDate" type="text" size="20" class="inputfield" id="datepicker" />
    <a href="#" id="apply_button">...</a>
    <a href="#" id="go_button">...</a>
}


public ActionResult Index(string lang)
{
    return View();
}

//Perhaps this action is needed
[HttpPost]
public ActionResult Index(string lang, string startDate)
{
    return View();
}

[HttpPost]
public ActionResult Search(string lang, string startDate)
{
    return View();
]
Run Code Online (Sandbox Code Playgroud)

javascript asp.net-mvc jquery posting

5
推荐指数
1
解决办法
4179
查看次数