新しい一日、新しいアイデア。私は本当にこれを忘れてしまった。
あなたがデザイン時に検証をしたい場合は、それはこのような何かを行うには全く可能です:あなたはそれ独自のワークフローを設計するクライアントのための活動を利用可能にしている場合
public sealed class MyActivity<T> : NativeActivity<T>
{
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
base.CacheMetadata(metadata);
if (typeof(T) != typeof(int) &&
typeof(T) != typeof(bool) &&
typeof(T) != typeof(DateTime) &&
typeof(T) != typeof(decimal) &&
typeof(T) != typeof(string))
{
metadata.AddValidationError(
"Generic must be 'int', 'DateTime', 'decimal' or 'string'");
}
}
protected override void Execute(NativeActivityContext context)
{
// Execution logic
}
}
これは完全に許容可能であるが。しかし、これは設計時の検証であることに注意してください。コードを使用してアクティビティを使用すると、完全にコンパイルされますが、実行時に検証/実行されると検証例外がスローされます。
ジェネリック活動のタイプを制約する唯一の方法は、あなたが他のgeneric type constraintを使用していただけのように、where
キーワードです。ダイアログは、すべてのタイプが、struct
をフィルタリングします
public sealed ReadDocumentProperty<T> : CodeActivity<T>
where T : struct
{
//...
}
:あなたはこのような何かを行う場合は、汎用型を選択しダイアログについて
。たぶんその方法System.Doubleがデフォルトリストに表示されますが、それはちょうど推測(テストしていない)ですが、もちろんそれに頼ることはできません。さらに、タイプを最初に選択した場合、そのタイプはデフォルトのリストにはないので、2回目にそのタイプが表示されます。
編集:
私はこの男を理解することができます何のために彼はリフレクションを使用して、線形の近くにどこにもそれをやっての直接または文書化の方法ではありませんが、に「reduce the "browse for types" list」方法を見つけました。私が見ることができるのは、特定のアクティビティではなく、すべてのエディタのリストを減らすことです(そうでなければこれを忘れてください)
私はジェネリックタイプを制約することを考えましたが、 (基本的にはint、bool、DateTime、10進数、および文字列) –
あなたは正しいです。それは神の気持ちC#の限界です。とにかく、私の編集をチェックし、役立つかどうかを確認してください。 – Joao
はい、私はそれを読んで、私はそれが線形、直接、または明らかにサポートされていないことに同意します:)私は別の方法を行った、私はちょうど私が欲しかったいくつかの種類の具体的なクラスを作ることに終わった。その汎用タイプのピッカーを変更するための「適切な」方法はないようです。 –