gpt4 book ai didi

c# - 键入不可知类以在泛型类中调用泛型和非泛型方法?

转载 作者:行者123 更新时间:2023-11-30 22:38:26 25 4
gpt4 key购买 nike

我有以下类(class):

public class GenericClass<T> : IGenericClass<T> where T : class
{
public GenericClass()

public GenericClass(Entity e)

public IQueryable<T> GenericMethod1()

public IEnumerable<T> GenericMethod2()

public T NonGenericMethod1(T t)
}

类(class)效果很好;然而,我开始遇到一些问题,我必须为我想使用的每种类型 T 实例化另一个 GenericClass 实例,这有点疯狂。我可以创建某种抽象来简化它吗?

我正朝着这个方向前进,但我不知道这是否是正确的选择,或者是否有更好的设计模式可以使用;另外,这两个 invoke 调用根本无法正常工作。

public class TestClass
{
private Type type;

public object Invoke(string method, object obj)
{
type = obj.GetType();

MethodInfo m = typeof(GenericClass<>).GetMethod(method);

var result = new object();

if(m.IsGenericMethod == true)
result = m.MakeGenericMethod(type).Invoke(null, new object[] { obj });
else
result = m.Invoke(null, new object[] { obj });

return result;
}
}

TIA

最佳答案

however I'm starting to run into issues where I have to instantiate another instance of GenericClass for every type T I want to use, and it's getting a little crazy

如果没有 GenericClass 的一些实现,很难猜测...但我看到构造函数和方法 - 没有属性(也没有字段?)。

如果是这种情况,您可能希望使 GenericClass 成为具有静态方法的静态类。然后你不能实例化它,你可以直接从类型中调用方法:

public static class GenericClass
{
public static IQueryable<T> GenericMethod1<T>() where T:class

public static IEnumerable<T> GenericMethod2<T>() where T:class

public static object NonGenericMethod1(object t)
}

调用者

IQueryable<Customer> query = GenericClass.GenericMethod1<Customer>();
IEnumerable<Customer> items = GenericClass.GenericMethod2<Customer>();
Customer c = (Customer) GenericClass.NonGenericMethod1(customerInstance);

或者可能有属性或字段,但它们不依赖于 T,那么您可以将通用责任移至方法而不是类。

现在您可以拥有一个实例,并且该实例可以处理您想要抛给它的所有 T。

public class GenericClass : IGenericClass
{
public IQueryable<T> GenericMethod1<T>() where T:class

public IEnumerable<T> GenericMethod2<T>() where T:class

public object NonGenericMethod1(object t)
}

对于这个答案的通用性,我深表歉意,但这是由于问题的通用性。

关于c# - 键入不可知类以在泛型类中调用泛型和非泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6132036/

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