C#隐式/显式类型转换

8

我有一个简单的场景,可能可行也可能不可行。 我有一个包含整数的类,为了简单起见,我将尽可能简化它:

public class Number
{
    public int Value {get; set;}
    public string Name {get; set;}
}

public static void Print(int print)
{
    Console.WriteLine(print);
}

public static string Test()
{
    Number num = new Number (9, "Nine");
    Print(num); //num "overloads" by passing its integer Value to Print.
}

// Result
// 9

我如何让Test()函数像我编码的那样工作?这是否可能?我认为可以使用显式/隐式操作符来完成,但我无法理解。


1
你可以使用 implicit 操作符,但为什么你的类可以被隐式转换为整数如此重要呢?只传递 num.Value 似乎是一个更好的解决方案。 - zneak
我已经搞清楚了。我的语法完全错了。我这样做是因为类意味着一个值;我认为只需添加返回.Value的隐式部分就可以了。 - Mike
我相关的问题可能会让您感兴趣:C#中的隐式/显式转换方法是否会被继承? - Jonathon Reinhart
4个回答

18

试试像这样

    public static implicit operator int(Number num)
    {
        return num.Value;
    }

2
class Number
{  
    public static implicit operator int(Number n)
    {
       return n.Value;
    }
}

为什么要发表自己的答案,当已经有人提供了一个答案?你应该只是投票支持那个答案。 - Cody Gray
4
因为在没有其他答案时,我回答了它。我只差一分钟。 - Mike

1

隐式转换

// Implicit conversion. num long can
// hold any value an int can hold, and more!
int num = 2147483647;
long bigNum = num;

显式转换

class Test
{
    static void Main()
    {
        double x = 1234.7;
        int a;
        // Cast double to int.
        a = (int)x;
        System.Console.WriteLine(a);
    }
}

希望这能对你有所帮助。


0

隐式类型转换:隐式类型转换发生在较小的整数类型向较大的整数类型转换,但反之不成立,或者从派生类到基类的转换。C#以类型安全的方式进行转换,不会发生数据丢失。 例如,

int a = 10;
long b = a;
float f = a;

显式类型转换:使用内置的C#函数进行显式类型转换。在显式类型转换时可能会丢失数据,这意味着如果我们将double转换为int,则可能会丢失精度。显式类型转换需要进行强制转换。要进行强制转换,需要在要转换的值或变量前面指定要转换到的类型。

例如:

double d = 10.20;
int a = (int)d;
//Output: 10

如需详细了解,请参阅C#基础 - C#类型转换


“no data loss takes place” 不是很准确,一个 float(.NET Single)无法准确地表示所有可能在 int 中出现的值。 - Lasse V. Karlsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接