http://xdwangiflytek.iteye.com/blog/1390464
今天熟悉项目时遇到下面这段代码竟不知道什么意思,记录一下:
C#代码

- public T CreateViewModel<T>() where T : BaseViewModel, new()
- {
- T viewModel = new T
- {
- SiteTitle = Settings.SiteTitle,
- SiteDescription = Settings.SiteDescription,
- RootUrl = Settings.RootUrl.TrimEnd('/'),
- AbsolutePath = Settings.AbsolutePath.TrimEnd('\\'),
- MetaKeywords = Settings.MetaKeywords,
- MetaDescription = Settings.MetaDescription,
- IsCurrentUserAuthenticated = IsCurrentUserAuthenticated,
- CurrentUser = CurrentUser,
- ThemeName = ThemeName,
- StyleSheetUrl = GetThemeStyleSheetUrl()
- };
- if (CurrentUser != null)
- {
- viewModel.IsAdmin = CurrentUser.SysRoles.Contains(SysRoles.Administrator);
- }
- else
- {
- viewModel.IsAdmin = false;
- }
- return viewModel;
- }
public T CreateViewModel<T>() where T : BaseViewModel, new() { T viewModel = new T { SiteTitle = Settings.SiteTitle, SiteDescription = Settings.SiteDescription, RootUrl = Settings.RootUrl.TrimEnd('/'), AbsolutePath = Settings.AbsolutePath.TrimEnd('\\'), MetaKeywords = Settings.MetaKeywords, MetaDescription = Settings.MetaDescription, IsCurrentUserAuthenticated = IsCurrentUserAuthenticated, CurrentUser = CurrentUser, ThemeName = ThemeName, StyleSheetUrl = GetThemeStyleSheetUrl() }; if (CurrentUser != null) { viewModel.IsAdmin = CurrentUser.SysRoles.Contains(SysRoles.Administrator); } else { viewModel.IsAdmin = false; } return viewModel; }
查找后发现这是类型参数约束,.NET支持的类型参数约束有以下五种:
where T : struct | T必须是一个结构类型
where T : class T必须是一个类(class)类型
where T : new() | T必须要有一个无参构造函数
where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类
where T : NameOfInterface | T必须实现名为NameOfInterface的接口