In c# 3.0, is it possible to add implicit operators to the string class?

一笑奈何 提交于 2019-12-01 16:57:03

问题


something like

public static class StringHelpers
{
    public static char first(this string p1)
    {
        return p1[0];
    }

    public static implicit operator Int32(this string s) //this doesn't work
    {
        return Int32.Parse(s);
    }
}

so :

string str = "123";
char oneLetter = str.first(); //oneLetter = '1'

int answer = str; // Cannot implicitly convert ...

回答1:


No, there's no such thing as extension operators (or properties etc) - only extension methods.

The C# team have considered it - there are various interesting things one could do (imagine extension constructors) - but it's not in C# 3.0 or 4.0. See Eric Lippert's blog for more information (as always).




回答2:


Unfortunately C# does not allow you to add operators to any types that you don't own. Your extension method is about as close as you are going to get.




回答3:


  /// <summary>
    /// 
    /// Implicit conversion is overloadable operator
    /// In below example i define fakedDouble which can be implicitly cast to touble thanks to implicit operator implemented below
    /// </summary>

    class FakeDoble
    {

        public string FakedNumber { get; set; }

        public FakeDoble(string number)
        {
            FakedNumber = number;
        }

        public static implicit operator double(FakeDoble f)
        {
            return Int32.Parse(f.FakedNumber);
        }
    }

    class Program
    {

        static void Main()
        {
            FakeDoble test = new FakeDoble("123");
            double x = test; //posible thanks to implicit operator

        }

    }



回答4:


What you are trying to do in your example (defining an implicit operation from string to int) is not allowed.

Since an operation (implicit OR explicit) can only be defined in the class definition of the target or destination class, you cannot define your own operations between framework types.




回答5:


I am thinking your best bet is something like this:

public static Int32 ToInt32(this string value)
{
    return Int32.Parse(value);
}


来源:https://stackoverflow.com/questions/1792048/in-c-sharp-3-0-is-it-possible-to-add-implicit-operators-to-the-string-class

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!