首页 > 解决方案 > 我可以分配一个类型,就好像它是一个 int 或一个字符串

问题描述

假设我创建了一个类Number。有没有一种方法可以像使用整数或字符串一样分配这种类型的变量?

Number n1 = 123;
Number n2 = "123";

我不介意有一个处理任何这些声明的构造函数,只要我可以这样写。

标签: c#declaration

解决方案


您不能=为用户定义的类型(例如您的Number类)重载赋值运算符。但是,您可以使用构造函数方法,可以使用用户定义的转换运算符。看起来像这样:

public class Number
{
    private int _actualValue;

    public Number(int value) => _actualValue = value;

    // User defined conversion operators
    // From int
    public static implicit operator Number(int value)
        => new Number(value);

    // From string
    public static implicit operator Number(string value)
    {
        if (!int.TryParse(value, out _actualValue))
        {
            // Invalid format, couldn't parse
            // Throw exception, or set _actualValue = 0
        }
    }
}

要使用它:

// From int
Number number = (Number)123;

// From string
Number number = (Number)"123";

// You can exclude the explicit "(Number)" cast

更多关于用户定义的转换操作在这里:https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/user-defined-conversion-operators


推荐阅读