コンストラクターでさまざまな型を受け入れ、元の Type とそれぞれの値の両方を保持するには、Criterion クラスが必要です。この用語のパラメーターの数は、0 から任意の範囲で指定できます。
/* Examples of calls:
var c = new Criterion("IsActive", OperationCode.EQUALS, false);
var c = new Criterion("AgeRange", OperationCode.BETWEEN, 18, 35);
*/
public Criterion(string fieldName, OperationCode op, params object[] value) {
string FieldName = fieldName;
OperationCode Op = op;
object[] Value = value;
string display = String.Format("{0} {1} {2}", FieldName, Op, Value[0]);
}
いずれの場合も、 Value の要素は値ではなくSystem.String[]を返します。最初の呼び出し例では、display はIsActive EQUALS System.String[]に設定されます。Convert.ToString(Value[0]) も.ToString()も役に立ちません。アイデア?
編集 #1: Dmitry S は、調査の道を開くテストを提案しました。唯一の value[] 引数として「false」を指定して Criterion を呼び出しています。イミディエイト ウィンドウで value.GetType() を出力すると、予想どおり、それが Object[] であることがわかります。value[0].GetType() は、それが String[] であることを明らかにします。もともとは文字列ですが、この場合 .IsArray が true である理由がわかりません。整数 14 で呼び出すと、value[0].GetType() は非配列 Int32 を明らかにします。これまでのところ、タイピングは理にかなっています。しかし、型ではなく値を取得することに興味があります。