2012-06-15 4 views
6

VBA(と私はVBと仮定します)には、より多くのメモリを占めると考えられるVariant型がありますが、さまざまなデータ型が対象です。Variant Type in C#

C#に相当するものはありますか? Windowsフォームで

はそれがOK実行されるように、私は、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

dynamicキーワードまたはオブジェクト型は、あなたのバリアントの動作を与えることができますあなたは欲しいけど:それはアルですので

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

:この場合

私はに機能を変更したいですメソッドが必要です。

あなたがC#でおよそ 「バリアント」タイプを話している場合は、.NET 4.0

dynamic種類を見てみましょう

+0

ok - 質問を修正してください。 – whytheq

+0

パラメータをstringに変更するだけで動作しません - 試してみてください。私は他のコードも修正する必要があります。私はちょうどオブジェクトを修正するつもりだ – whytheq

+0

あなたが考慮する必要が何かは、関数の使用です。あなたはどんなタイプも受け入れるようにしますか? –

1

しかし、あなたのタスクを解決するためには、あなたのMessageBox.Show

z.ToString()を使用するのに十分だろう
2

"amount; "+zは、zでToStringメソッドを暗黙的に呼び出します。 ですから、タイプobject使用することができます:あなたはまた、動的に使用できる

​​

を、私はポイントが表示されない:

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

には「動的」にオーバーヘッドがありますか?なぜあなたは代わりに 'オブジェクト'を選ぶのでしょうか? – whytheq

+0

はい、あります。動的に実行時に型を把握する必要があります –

5

オブジェクトパラメータは、すべてを受け入れるだろうが、あなたが欲しい場合強く型付けされた変数を保持し(その過程でボクシングを避ける)ために、あなたはジェネリック医薬品を使用することができます。

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

メソッド呼び出しは、理由は正確に同じままでしたコンパイラは指定されたパラメータに基づいてジェネリック型を解決できます。

+0

私はC#初心者です。 'generics'のためのこの構文:' (Tz) 'は私がまだ出くわしたことではありません – whytheq

関連する問題