gpt4 book ai didi

c# - 如何在泛型类中访问 T 类型的静态属性?

转载 作者:IT王子 更新时间:2023-10-29 04:08:11 24 4
gpt4 key购买 nike

我正在尝试实现以下场景,即通用 TestClassWrapper 将能够访问构成它的类的静态属性(它们都将派生自 TestClass)。像这样的东西:

public class TestClass
{
public static int x = 5;
}

public class TestClassWrapper<T> where T : TestClass
{
public int test()
{
return T.x;
}
}

给出错误:

'T' is a 'type parameter', which is not valid in the given context.

有什么建议吗?

最佳答案

基本上,至少不能没有反射(reflection)。

一个选择是在构造函数中放置一个委托(delegate),这样创建实例的人就可以指定如何获取它:

var wrapper = new TestClassWrapper<TestClass>(() => TestClass.x);

如有必要,您可以通过反射(reflection)来做到这一点:

public class TestClassWrapper<T> where T : TestClass
{
private static readonly FieldInfo field = typeof(T).GetField("x");

public int test()
{
return (int) field.GetValue(null);
}
}

(如有必要,添加适当的绑定(bind)标志。)

这不是很好,但至少您只需要查找该字段一次...

关于c# - 如何在泛型类中访问 T 类型的静态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7186491/

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