gpt4 book ai didi

c# - 如何创建通用类型类的新实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:04 28 4
gpt4 key购买 nike

问题:

  1. 如何创建、设置、返回和实例化“T”类型的对象?
  2. 如何在静态函数中访问子类类型(标签:DataBASE)?

我正在尝试创建一个通用的“GetAsClass”函数,它会返回子类的一个初始化实例。我不知道如何创建我要返回的类的新实例并返回子类类型。

假设我有两个类:

  1. 标签
  2. 用户

我想在基类中创建一个函数,它将获取任何类型。另一方面,我也想让它成为静态的(但是我无权访问“this”并且我不确定如何获取子类类型。

    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;
}

Code so far更高分辨率:http://snag.gy/FbCfu.jpg

最佳答案

您可以在 generic type constraints 上找到此页面有帮助。基本上,您会将类/方法的签名更改为:

private async Task<T> GetAsClass<T>(string objectId)
where T: new()
{
...
}

只有当它提供一个没有参数的默认构造函数时,它才会接受 T 的类型。一旦该条件得到保证,您的类就可以调用 new T()

关于c# - 如何创建通用类型类的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26695674/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com