Новый день, новые идеи.Я действительно забыл об этом.
Если вы хотите проверить во время разработки, вполне возможно сделать что-то вроде этого:
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
}
}
Это вполне приемлемо, если вы делаете действия доступными дляклиент для разработки собственного рабочего процесса.Но имейте в виду, что это проверка во время разработки .Если кто-то использует вашу деятельность через код, он отлично скомпилируется, но при проверке / выполнении во время выполнения выдает исключительную ситуацию проверки.
Единственный способ ограничения типа для универсального действия - это ключевое слово where
, как вы использовали любое другое ограничение универсального типа .
Относительно ВыбратьДиалоговое окно Generic Types , если вы делаете что-то вроде этого:
public sealed ReadDocumentProperty<T> : CodeActivity<T>
where T : struct
{
//...
}
Диалог будет фильтровать все типы, кроме struct
.Может быть, таким образом System.Double появится в списке по умолчанию, хотя это всего лишь предположение (не проверялось), и, конечно, вы не можете на него полагаться.Более того, если вы впервые выберите тип, которого нет в списке по умолчанию, во второй раз он появится в нем.
Edit :
Для того, что я могу понять, этот парень нашел способ " сократить список" просмотра типов "", хотя он использует рефлексию и находится далеко от линейного, прямого или документированного способаДелать это.Насколько я вижу, это сокращает список для всего редактора, а не для конкретного действия (если учесть, что вы используете редактор с измененным интерфейсом, иначе забудьте об этом)