C#中的变体类型

时间:2012-06-15 07:48:30

标签: c# types

VBA(我假设VB)有一个Variant类型,我认为它占用了更多的内存,但涵盖了各种数据类型。

c#中是否有等价物?

在Windows窗体中说我有以下内容,如何修改z的类型以便运行正常

    private void uxConvertButton_Click(object sender, EventArgs e)
    {
        int x = 10;

        byte j = (byte)x;
        upDateRTB(j);

        long q = (long)x;
        upDateRTB(q);

        string m = x.ToString();
        upDateRTB(m);
    }

    void upDateRTB(long z) {
        MessageBox.Show(this,"amount; "+z);
    }

5 个答案:

答案 0 :(得分:10)

void upDateRTB(object z) {
    MessageBox.Show(this, "amount; " + Convert.ToString(z));
}

答案 1 :(得分:5)

一个对象参数会接受所有,但如果你想保持变量强类型(并避免在过程中装箱),你可以使用泛型:

void upDateRTB<T>(T z) {
    MessageBox.Show(this,"amount; "+ Convert.ToString(z)); 
}

方法调用可以保持完全相同,因为编译器可以根据给定参数解析泛型类型。

答案 2 :(得分:4)

如果您在c#中谈论“variant”类型,请查看.net 4.0中的dynamic类型

但是要解决您的任务,只需在z.ToString()

中使用MessageBox.Show即可

答案 3 :(得分:2)

动态关键字或对象类型可以为您提供所需的变体行为,但是:

在这种情况下,我将功能更改为:

void upDateRTB(string z) {
    MessageBox.Show(this,"amount; " + z);
}

因为这就是所有方法的需要。

答案 4 :(得分:2)

"amount; "+z隐式调用z上的ToString方法。 因此,您可以使用object类型:

void upDateRTB(object z) {
    MessageBox.Show(this,"amount; "+z);
}

你也可以使用动态,但我不明白这一点:

void upDateRTB(dynamic z) {
    MessageBox.Show(this,"amount; "+z);
}