8

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);
    }
4

5 回答 5

13
void upDateRTB(object z) {
    MessageBox.Show(this, "amount; " + Convert.ToString(z));
}
于 2012-06-15T07:49:50.183 回答
8

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

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

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

于 2012-06-15T07:56:41.327 回答
7

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

z.ToString()但是为了解决你的任务,在你的使用中就足够了MessageBox.Show

于 2012-06-15T07:51:33.067 回答
3

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

在这种情况下,我会将函数更改为:

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

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

于 2012-06-15T07:51:17.207 回答
3

"amount; "+z隐式调用 上的 ToString 方法z。所以你可以使用类型object

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

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

void upDateRTB(dynamic z) {
    MessageBox.Show(this,"amount; "+z);
}
于 2012-06-15T07:52:22.990 回答