问题:
我试图创建一个通用" GetAsClass"函数,它将返回子类的初始化实例。我无法弄清楚如何创建我想要返回的类的新实例并返回子类类型。
说我有两个班级:
我想在基类中创建一个单独的函数,它将获得它的任何类型。另一方面,我也希望将其设置为静态(但是我无法访问"这个"我不知道如何获得子类型
private async Task<T> GetAsClass<T>(string objectId) {
Type classType = this.GetType();
string className = classType.Name;
// This needs to be of type "T" (Tag myTag = new Tag();) How would I accomplish something like this?
object toReturnObject = new object();
ParseObject myParseObject = ParseObject.GetAsParseObject(objectId);
foreach (PropertyInfo field in classType.GetRuntimeProperties()) {
if (field.CanRead) {
string propertyName = StringHelper.ToLowerCamelCase(field.Name);
if (field.PropertyType == typeof(string)) {
string propertyValue = myParseObject.Get<string>(propertyName);
field.SetValue(toReturnObject , propertyValue);
}
if (field.PropertyType == typeof(int)) {
int propertyValue = myParseObject.Get<int>(propertyName);
field.SetValue(toReturnObject, propertyValue);
}
}
}
return toReturnObject;
}
更高分辨率:http://snag.gy/FbCfu.jpg
答案 0 :(得分:3)
您可以在generic type constraints上找到此页面以获得帮助。 基本上,您可以将类/方法的签名更改为:
private async Task<T> GetAsClass<T>(string objectId)
where T: new()
{
...
}
只有当它提供没有参数的默认构造函数时,它才会接受T的类型。一旦该条件得到保证,您的班级就可以调用new T()