我有一堆具有相同属性的模型 - greenPeople,bluePeople等。对于每一个,我都有一个控制器,在帖子中,我将他们的图片推送到某个服务器并创建一个描述条目。实际上,我的模型是GreenPeoplePicture,BluePeoplePicture等。
所以我有类似的东西:
GreenPeoplePicture greenPeoplePicture = new GreenPeoplePicture();
greenPeoplePicture.Name = "blah"
greenPeoplePIcture.Date = DateTime.UtcNow;
等。一旦填写完毕,我就会流式传输到远程服务器,然后保存" greenPeoplePicture"到GreenPeoplePictures表。我想为此编写一个通用方法。我无法绕过如何在不传递任何变量的情况下传递类型本身,因为我想这样做:
GreenPeoplePicture greenPeoplePicture = new GreenPeoplePicture();
在方法中,并且返回类型为GreenPeoplePicture
。我相信这篇文章无异于#34;我无法编写代码,也无法理解泛型,"但我试过 - 至少告诉我它是否可能。 MSDN和tutorialspoint没什么帮助。
答案 0 :(得分:2)
这样的东西?
public T MakeColourPerson<T>() where T : new() {
return new T();
}
var myPerson = MakeColourPerson<GreenPeoplePicture>();
此外,如果GreenPeoplePicture
和BluePeoplePicture
有任何共同点(例如,如果它们继承自ColourPeoplePicture
,您可以更改其中的位置:
where T : ColourPeoplePicture, new()
更准确
这将允许您在MakeColourPerson
public T MakeColourPerson<T>()
where T : ColourPeoplePicture, new()
{
var colourPerson = new T();
colourPerson.Name = "blah";
colourPerson.Date = DateTime.UtcNow;
return colourPerson;
}
假设ColourPeoplePicture
公开了属性Name
和Date
答案 1 :(得分:1)
对于泛型,您可以使用default(T)
将变量初始化为默认值,也可以使用new T()
创建实例。要使用new()
,您应该通过添加new()
的类型约束来缩小类型的特异性
public T Factory<T>() where T : new() {
return new T();
}
或
return default(T);
如果你想处理每种类型的不同属性,那么泛型不能完全解决这个问题,你必须用反射来补充它以动态地查找属性。