作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 UserController 的 Controller ,其泛型类型为 T:
public class UserController<T> : Controller
{
}
然后,在这个类中,我有一个名为 Select() 的方法,具有通用类型:
public override T Select<T>(ushort id)
{
// UserModel is just a Class where I is an integer typed property
UserModel.I = 2;
object result = UserModel.I;
return (T)Convert.ChangeType(result, typeof(T));
throw new NotImplementedException();
}
现在在另一个表单类中,我像这样访问这个方法:
// This is so far working
UserController<int> us = new UserController<int>(0);
label1.Text = us.Select<string>(0);
现在我收到这个警告:
Severity Code Description Project File Line Suppression State
Warning CS0693 Type parameter 'T' has the same name as the type
parameter from outer type 'UserController<T>'
我不明白这里说的是什么:
Type parameter 'T' has the same name as the type
parameter from outer type 'UserController<T>'
我在这里做错了什么?
最佳答案
如果您希望您的方法使用与您的类相同的类型进行参数化,则不要在方法名称中包含通用参数:
public override T Select(ushort id) /* Uses T from class */
但是,从您的其他示例来看,您似乎想要使用不同的类型 - 因此为参数使用不同的名称:
public override TInner Select<TInner>(ushort id)
{
// UserModel is just a Class where I is an integer typed property
UserModel.I = 2;
object result = UserModel.I;
return (TInner)Convert.ChangeType(result, typeof(TInner));
throw new NotImplementedException();
}
(一般来说,尝试选择比 T
甚至 TInner
更好的名称 - 正如您应该为其他参数选择好的名称一样,尝试传达 类型参数名称中类型的用途
关于C# 泛型类型 : Warning from outer type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43135230/
我是一名优秀的程序员,十分优秀!