【问题标题】:Modify method parameters the same way in many methods在许多方法中修改方法参数的方式相同
【发布时间】:2016-08-25 13:48:57
【问题描述】:

有没有一种直接的方法可以修改方法的每个参数,而不必在方法中编写代码?
我使用存储过程作为数据库层,任务是为提供 '*' 通配符的应用程序提供通配符使用,并且必须更改为 '%' sql 通配符。

拥有这样的 WildcardAttribute 会很棒:

[WildcardAttribute('*', '%')]
[WildcardAttribute('?', '_')]
SearchMethod( s) // -> value of s: *
{
   InvokeSPROC( s) // -> value of s:  %
}

而不是:

  SearchMethod( s) // -> value of s: *
    {
       InvokeSPROC( s.Replace("*", "%").Replace("?", "_")) 
    }

在 sproc 中进行此修改不是一个选项..

谢谢!

【问题讨论】:

    标签: c# stored-procedures wildcard


    【解决方案1】:

    当然,您可以使用 PostSharp 之类的 AOP 框架来执行此操作。 https://www.postsharp.net/aop.net

    有关示例,请参阅http://doc.postsharp.net/method-decorator。部分访问参数

    也可以在方面方法中修改参数值。您需要做的就是修改 Arguments 集合中项目的值。请记住,Arguments 集合中的所有项目都是对象类型,因此您需要小心更改值的方式。如果您正在修改的值最初是一个字符串,您需要确保它保持为字符串类型

    .Net 有更多的 AOP 框架,因此您可以阅读它们。

    顺便问一下,您的代码InvokeSPROC 看起来如何?不能替换那里的字符吗?

    编辑: 如果它太复杂,您可以为它创建一个方法,或者编写一个扩展方法,如下所示:

    public static class StringExtensions
    {
        public static string SanitizeForStoredProcedure(this string pattern)
        {
            return pattern.Replace("*", "%").Replace("?", "_");    
        }
    }
    

    然后您可以使用它调用它

    SearchMethod( s) // -> value of s: *
    {
       InvokeSPROC( s.SanitizeForStoredProcedure() ) // -> value of s:  %
    }    
    

    【讨论】:

    • AOP 的东西似乎对我的要求来说太复杂了,所以我将增强 SPROC 调用方法。
    • @DanielDevo 这需要一点时间,是的。但它很强大。但是我已经使用扩展方法更新了我的答案。您还可以创建一个简单的方法,只要您确保只需要修改一段代码即可按预期更改行为。更多关于扩展方法:msdn.microsoft.com/en-us/library/bb383977.aspx
    猜你喜欢
    • 2014-02-27
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多