如何在c#中生成用户定义的函数,如(int).function()?

如何在c#中生成用户定义的函数,如(int).function()?,c#,C#,在C#中,当我将一个int值括在括号中并键入点时,我会得到一个可以对该int值执行的函数列表 string a = (12).ToString(); 我的问题是,我们如何定义这样的自定义函数?例如,我想定义一个函数toDateTime,它可以这样工作 DateTime dt = ("12/12/12").toDateTime(); 我完全理解,这也可以通过正常方式完成 DateTime dt = toDateTime("12/12/12"); 我只是好奇它是如何通过另一种方式完成的。您可以

在C#中,当我将一个int值括在括号中并键入点时,我会得到一个可以对该int值执行的函数列表

string a = (12).ToString();
我的问题是,我们如何定义这样的自定义函数?例如,我想定义一个函数toDateTime,它可以这样工作

DateTime dt = ("12/12/12").toDateTime();
我完全理解,这也可以通过正常方式完成

DateTime dt = toDateTime("12/12/12");
我只是好奇它是如何通过另一种方式完成的。

您可以创建一个

也许是这样:

public static class MyExtensions
{
     public static DateTime ToDateTime(this String str)
     {
         // return something
     }
}   

你所描述的是

这些是静态类和方法,IDE(VisualStudio)使它们看起来像是扩展类型的一部分

请注意,无需将类型括在括号中:

string a = 12.ToString(); // not an extension method - it is defined on Object

不能:基本类型上的这些函数,以及对象中定义的
ToString
之类的函数,都是由框架提供的。但是,您可以通过使用来获得(或多或少)相同的结果


扩展方法是静态类中的静态函数,IDE(VS)和编译器将其视为由第一个参数(用
this
标记)定义的类的成员函数。它们实际上与添加成员函数不同:它们的分辨率和优先级不同。

您可以使用扩展方法

public static DateTime ToDateTime(this string datestring)
{
    return DateTime.Parse(datestring);
}
扩展方法可以打包在
静态类中

例如:

static class Program
{
    public static DateTime ToDateTime(this string datestring)
    {
        return DateTime.Parse(datestring);
    }
    static void Main(string[] args)
    {
        DateTime date = "12/12/12".ToDateTime();

    }
}

可能是通过?旁注:
()
没有什么特别之处-你需要在
int
常量周围使用大括号来获取智能的原因是VS将“12”视为浮点数的开头,这与所有其他类型不同(例如字符串:
“aaa”。
显示
字符串的智能性
)。@Steve:对不起,我将参数类型改为
string
而不是
DateTime
Good,但是为什么不添加在DateTime中翻译该字符串的实际代码呢?这将完成整个过程answer@Steve我认为这没有必要,因为这超出了实际问题的范围,imho@Nolonar,我们对什么对网站访问者有用有不同的看法。@Steve不,我们只是有不同的逻辑和思维过程。我相信Ambar的问题是假设性的,没有证据表明他真的想将字符串转换为日期时间,正如他的问题标题
(int).function()
所示。此外,我怀疑任何想知道如何将字符串转换为日期时间的人都不会想到这个问题。已经有足够多的链接解释了细节。此外,欢迎您编辑答案,使其更清晰、更有用或更完整。我只是认为没有必要(但确实会很有用)为了清晰起见,将ToString()升级为Object的成员,而不是扩展方法+1。对于整数文本,intellisence需要大括号来拾取点:)@AlexeiLevenkov-Ctrl+Space通常就足够了。是的,但是没有大括号就没有神奇的列表。