2012-06-15 37 views
6

VBA(我假设VB)有一个Variant类型,我相信它会占用更多的内存,但涵盖了各种数据类型。C#中的变体类型

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

回答

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

动态关键字或对象类型可以给你不同的行为你想,但:

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

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

因为这是人该方法需要。

+0

好的 - 让我修改这个问题。 – whytheq

+0

只是将参数更改为字符串不起作用 - 请尝试。我需要修改其他代码。我只是要修改对象 – whytheq

+0

您需要考虑的是使用该功能。你想要它接受任何类型? –

1

如果你在谈论“变种”在C#类型,看看dynamic类型在.NET 4.0中

但对于解决你的任务就足够你MessageBox.Show

使用 z.ToString()
2

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

​​

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

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

有'动态'有更多的开销?这就是你为什么选择'object'的原因吗? – whytheq

+0

是的,它有。动态需要在运行时计算出类型 –

5

目标参数都可以接受,但如果你想保持强类型的变量(和避免在这个过程中拳击),你可以使用泛型:

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

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

+0

我是c#newbie; 'generics'的这种语法:'(T z)'并不是我遇到过的 – whytheq