I am refactoring my code and I want to replace these calls:
OnClickEv onClickPr = GetScriptPr<OnClickEv>(controlProps); if (onClickPr != null && onClickPr.Value != null) _script.Add(onClickPr.Value.ToString()); OnDblClickEv onDblClickPr = GetScriptPr<OnDblClickEv>(controlProps); if (onDblClickPr != null && onDblClickPr.Value != null) _script.Add(onDblClickPr.Value.ToString()); OnKeyDownEv onKeyDownEv = GetScriptPr<OnKeyDownEv>(controlProps); if (onKeyDownEv != null && onKeyDownEv.Value != null) _script.Add(onKeyDownEv.Value.ToString()); with single function where I simply pass classes or Types that should be processed:
CreateSimplePropWithParam(controlProps, new List<Type>() { typeof(OnClivkEv), typeof(OnDblClickEv), typeof(OnKeyDownEv) }); Template function:
private T GetScriptPr<T>(List<ScriptPr> properties) where T : ScriptPr { var pr = properties.Where(x => x.GetType() == typeof(T)).FirstOrDefault(); return (T)pr; } But how to pass that Type parameter to Template?
private void CreateSimplePropWithParam(List<ScriptPr> controlProps, DesignerPlatform designerPlatform, object param, List<Type> propsList) { foreach (Type type in propsList) { T prop = (ScriptPr)GetScriptPr<T>(controlProps); <<< what to do with T? if (prop != null && prop.Value != null) {... }}}
Tcomes from the word Template, so it is understandable that this causes confusion. Differences Between C++ Templates and C# Generics