gpt4 book ai didi

c# - 是否可以在泛型类的构造函数中使用强类型参数约束?

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:23 25 4
gpt4 key购买 nike

我想在 C# 中定义一个泛型类:

public class MyService<TModel>
{
public MyService(/*What to declare here?*/)
{
}
}

这样我就可以像下面这样实例化它:

var service = new MyService<SomeModel>(m => m.SomeField);

其中 SomeField 被限制为 SomeModel 的一个字段。这可能吗?

我知道我可以为类中的方法声明类似的内容,但不太清楚如何为构造函数完成此操作。例如,我可以在 MyService 中声明以下内容:

    public void SomeMethod<TMember>(Expression<Func<TModel, TMember>> member)
{
}

并且能够像这样调用它:

var service = new MyService<SomeModel>();
service.SomeMethod(m => m.SomeField);

如果 SomeField 实际上不是 SomeModel 的字段,编译器会报错。

最佳答案

你可以这样做:

public class MyService<TModel>
{
public static MyService<TModel> Create<TMember>(Func<TModel, TMember> member)
{
return new MyServiceImpl<TMember>(member);
}

private class MyServiceImpl<TMember> : MyService<TModel>
{
private Func<TModel, TMember> member;
public MyServiceImpl(Func<TModel, TMember> member)
{
this.member = member;
}
}
}

所以现在我可以这样做:

MyService<Foo> service = MyService<Foo>.Create(m => m.Name);

请注意,我不需要指定成员的类型。

这是我的类 Foo:

public class Foo
{
public string Name;
}

关于c# - 是否可以在泛型类的构造函数中使用强类型参数约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35446718/

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