【问题标题】:VB.net to C# Equivalent of "AddressOf"VB.net 到 C# 等效于“AddressOf”
【发布时间】:2011-12-05 05:55:14
【问题描述】:

我正在尝试实现这个例子

http://blog.evonet.com.au/post/Gridview-with-highlighted-search-results.aspx

但我面临的唯一问题是我无法在 C#.net 中转换的 VB.net 的 AddressOf 关键字

谁能帮我解决这个问题,我应该使用什么替代方法来使它工作。

谢谢。

编辑:我在 stackoverflow 上发现了一些关于类似问题的搜索,但我无法理解它们。

【问题讨论】:

标签: c# vb.net addressof


【解决方案1】:

你可以忽略它。方法组可以隐式转换为 C# 中的委托。

return ResultStr.Replace(InputTxt, new MatchEvaluator(ReplaceWords))

甚至更简单(我认为这需要 C# 2):

return ResultStr.Replace(InputTxt, ReplaceWords);

但由于ReplaceWords 如此简单,我会考虑使用 lambda 表达式(需要 C# 3):

return ResultStr.Replace(InputTxt, m => "<span class=highlight>" + m + "</span>");

【讨论】:

  • 感谢 CodeInChaos,我不知道这很容易,我认为经验会说话。再次感谢。
【解决方案2】:

根据您发布的链接,我假设您想要这个:

Return ResultStr.Replace(InputTxt, New MatchEvaluator(AddressOf ReplaceWords))

.. 在 C# 中?

如果是这样,您根本不需要 AddressOf 关键字。 MatchEvaluator 是一个委托类型,因此您可以简单地传递一个方法 (ResultStr.Replace(InputTxt, ReplaceWords))。或者,您可以为此使用匿名方法来减少代码,这是有道理的,因为它没有在其他地方使用:

return ResultStr.Replace(InputTxt, delegate(Match m) {
    return "<span class=highlight>" + m.ToString() + "</span>";
});

【讨论】:

  • "MatchEvaluator 是一个 EventHandler 类型" MatchEvaluator 是一个 delegate 类型。因此,您在两个示例中都使用了委托。第二个代码示例是一个匿名函数。
  • @CodeInChaos 这是漫长的一天。
【解决方案3】:

我认为您需要将其翻译成:

new EventHandler(theMethod)

【讨论】:

  • 这里不能使用new EventHandler。他示例中的方法需要不同的委托类型。
  • 没错,我没有阅读提供的链接,只是选择了一个通用(ish)选项!
【解决方案4】:

你应该可以使用这样的东西:

return ResultStr.Replace(InputTxt, new MatchEvaluator(ReplaceWords))

基本上,在 c# 中您不需要 'addressOf' 运算符。我喜欢拥有它,因为它让事情变得非常清楚,但 c# 就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-15
    • 2011-05-07
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多