C# - 获取泛型参数,使用反射修改属性,并返回泛型参数

发布于 2025-01-06 11:31:20 字数 378 浏览 0 评论 0原文

我试图接受一个泛型参数,通过反射操作它的属性,然后返回具有修改后的属性的泛型类型。

public IEnumerable<T> GenerateTest()
{
     var type = typeof(T);

foreach (var field in type.GetProperties())
                {
               // Modify / Set properties on variable type

                }

// How do I return object T with the parameters that I modified in the iteration above?
}

I'm trying to take in a generic argument, manipulate the properties of it via Reflection, and then return the generic type with the modified properties.

public IEnumerable<T> GenerateTest()
{
     var type = typeof(T);

foreach (var field in type.GetProperties())
                {
               // Modify / Set properties on variable type

                }

// How do I return object T with the parameters that I modified in the iteration above?
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゞ花落谁相伴 2025-01-13 11:31:20

为了能够创建一个新的 T 对象,您需要将 new() 约束添加到类型参数:

class MyClass<T> where T : new()
{
    public IEnumerable<T> GenerateTest()
    {

然后您可以创建一个新的 T code> 对象并设置其属性:

        var obj = new T();

        foreach (var field in typeof(T).GetProperties())
        {
            field.SetValue(obj, ...);
        }

因为您的方法返回一个 IEnumerable,所以您不能直接返回 T 对象,而是需要包装在一个集合中:

        var list = new List<T>();
        list.Add(obj);
        return list;
    }
}

To be able to create a new T object, you need to add the new() constraint to the type parameter:

class MyClass<T> where T : new()
{
    public IEnumerable<T> GenerateTest()
    {

Then you can create a new T object and set its properties:

        var obj = new T();

        foreach (var field in typeof(T).GetProperties())
        {
            field.SetValue(obj, ...);
        }

Because your method returns an IEnumerable<T>, you can't return your T object directly but need to wrap in a collection:

        var list = new List<T>();
        list.Add(obj);
        return list;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文