制約

2012-03-15 15 views
0

I持っていたデータログアウト、およびのparamsキーワードを使用して、入力の束を取る方法制約

public static void LogData<T>(params object[] parameter) 
{ 
    // log out the data 
} 

私は文字列と数値型への入力を制限したいと思いますし、私の最初の考えはでしたwhere句を使用します。これに関する明らかな問題は、where句では具体的な型を使用できないことですが、文字列型と数値型の両方がIComparableとIConvertibleであることに注意して回避できます。

public static void LogData<T>(params T[] parameter) 
    where T : IComparable, IConvertible 
{ 
    // log out the data 
} 

すべての入力が1つのタイプでなければならないため、これは機能しません。

paramsキーワードやその他の構文を使用して、入力を文字列型と数値型に制限する方法はありますか?

+0

なぜあなたはそれをしますか?これらの制約が利用可能な唯一の理由は、プログラマーにメソッドの呼び出し、オブジェクトの作成、ectの可能性を与えることです。 –

答えて

1

すべてのオブジェクトにToStringメソッドがあるとき、なぜそれをやりたいのかわかりません。

とにかく、サポートする文字列と数値型からの暗黙的な変換をサポートする新しいクラス - NumberOrStringを宣言できます。次に、あなたのLOGDATAメソッドを使用すると、およそstringsnumeric種類を話している、それは不可能ですConsiidering params NumberOrString[] p

0

を受け入れてきました。条件がまたはの場合、タイプList<T>optional parameterを定義できます。ここで、Tは任意の数値タイプです。

0

私はサポートしたいタイプを使用して本質的にオーバーロードされる複数のメソッドを作成したいと思います。 がコードと繰り返しが多すぎるかもしれませんが、基本的な "ログアウトデータ"ルーチンは本質的にすべてのオーバーロードで再利用されます。私はあなたがIComparableをかIConvertibleするオブジェクトを必要とするいかなる理由が実際にあるかどうだろうが

public static void LogData(params IConvertible[] parameter) 
{ 
    // log out the data 
} 

、またはあなただけの既知の型にそれらを制限したい場合(つまり、文字列:

0

ここに1つの潜在的解決策ですまたは数字)。私はzmbqの答えが行く方法かもしれないと思う。または、オブジェクトが有用なToStringメソッドを実装しているかどうかを実際に見たい場合もあります。 Here's a wayを見つけてください(コンパイル時の制限ではありませんが、実際にはリフレクションを使用しています)。