c# -我可以从一个函数映射调用到实际调用另一个函数吗?

本文关键字:函数 调用 映射 另一个 一个 我可以 | 更新日期: 2023-09-27 18:11:58

这是我的情况:我不得不暂时从。net 4降级到。net 3.5一段时间。但是,我希望以后能够尽快地迁移回来。

里面有一些函数。我们用的NET4没有3.5的等价物,比如String.IsNullOrWhitespace。我可以自己实现这个函数,但是我不想为了使用另一个静态类(如MyString.IsNullOrWhitespace)而更新几十个调用。

是否有一种方法,也许是利用一些创造性的"使用"语法将所有引用映射到String.IsNullOrWhitespaceMyString.IsNullOrWhitespace?,或者c#编译器是否有任何其他特性或功能可以做到这一点?或者我只需要全局搜索并将"String.IsNullOrWhitespace"替换为"MyString.IsNullOrWhitespace" ?谢谢!

c# -我可以从一个函数映射调用到实际调用另一个函数吗?

我想你是在寻找扩展方法。

http://msdn.microsoft.com/en-us/library/bb383977.aspx

你根本不需要修改你的代码。你可以实现你自己的IsNullOrWhiteSpace,它直接附加到字符串类上。前提是您引用了扩展方法所在的名称空间。

编辑:

我刚刚意识到IsNullOrWhiteSpace是一个静态方法,您不能创建静态扩展方法。但也许你可以这样做:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static bool IsNullOrWhiteSpace(this String str)
        {
            // ToDo: implement this
        }
    }   
}

将在string的实际实例中调用,即:

if(myString.IsNullOrWhiteSpace())

,它实际上比你当前所做的要短一些:

if(string.IsNullOrWhiteSpace(myString))

如果您想在从3.5升级到4.0时将代码更改到最低限度,您可以创建Neil N建议的扩展方法。当你升级时,你可以重写扩展方法来包装框架的静态方法,而不是改变所有的调用地点:

之前
namespace ExtensionMethods 
{ 
    public static class MyExtensions 
    { 
        public static bool IsNullOrWhiteSpace(this String str) 
        { 
            // ToDo: implement this 
        } 
    }    
} 

namespace ExtensionMethods 
{ 
    public static class MyExtensions 
    { 
        public static bool IsNullOrWhiteSpace(this String str) 
        { 
            return string.IsNullOrWhiteSpace(str);
        } 
    }    
} 

如果你使用ReSharper这样的重构工具,你可以使用"内联方法"重构,这将比全局搜索和替换操作更安全、更容易。