gpt4 book ai didi

c# - 泛型:如何检查 T 的确切类型,没有 T 的对象

转载 作者:可可西里 更新时间:2023-11-01 08:52:48 24 4
gpt4 key购买 nike

如果没有 T 的对象,我如何检查/评估 T 的确切类型。我知道我的问题可能令人困惑,但考虑一下......

 public abstract class Business
{
public abstract string GetBusinessName();
}

public class Casino : Business
{
public override string GetBusinessName()
{
return "Casino Corp";
}
}

public class DrugStore : Business
{
public override string GetBusinessName()
{
return "DrugStore business";
}
}


public class BusinessManager<T> where T : Business
{
private Casino _casino;
private DrugStore _drugStore;

public string ShowBusinessName()
{
string businessName;
if (T == Casino) // Error: How can I check the type?
{
_casino = new Casino();
businessName = _casino.GetBusinessName();
}
else if (T == DrugStore) // Error: How can I check the type?
{
_drugStore = new DrugStore();
businessName = _drugStore.GetBusinessName();
}

return businessName;

}
}

我只想在客户端有这样的东西。

    protected void Page_Load(object sender, EventArgs e)
{
var businessManager = new BusinessManager<Casino>();
Response.Write(businessManager.ShowBusinessName());

businessManager = new BusinessManager<DrugStore>();
Response.Write(businessManager.ShowBusinessName());
}

请注意,当我调用 BusinessManager 时,我实际上并没有为 Casino 和 Drugstore 创建实际对象,我只是将它作为类的通用类型约束传递。我只需要确切地知道我传递给 BusinessManager 的是什么类型,就可以知道要实例化的确切类型是什么。谢谢...

PS:我不想为赌场和药店创建单独的特定 BusinessManager..

您也可以对设计发表评论..谢谢..

附加:如果类 Casino 和 DrugStore 是一个抽象类 =)

最佳答案

你可以写

if(typeof(T) == typeof(Casino))

但实际上这种逻辑是一种代码味道。

这是解决这个问题的一种方法:

public class BusinessManager<T> where T : Business, new() {
private readonly T business;
public BusinessManager() {
business = new T();
}
}

但我个人更喜欢

public class BusinessManager<T> where T : Business {
private readonly T business;
public BusinessManager(T business) {
this.business = business;
}

public string GetBusinessName() {
return this.business.GetBusinessName();
}
}

关于c# - 泛型:如何检查 T 的确切类型,没有 T 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064322/

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