c# - C#检测发送到泛型类的对象并开始处理
问题描述
我很抱歉我的英语不好。有一个问题我无法解决,因为我是泛型新手。
当构造函数方法运行时,如何检测传入的类。我必须通过访问类属性来继续这个过程。你能帮助我了解我应该遵循的方式吗?
public class IslemeBasla<T> where T : class, IEntity
{
private string _profilName;
public int _processCount;
private IWebDriver _driver;
private ChromeDriverService _cService;
private string _arguments;
public T _hEntity;
public IslemeBasla()
{
Type type = typeof(T);
switch (type.Name)
{
// I want to do something like this.
case "Facebook": _hEntity = (facebook)T;
break;
case "Twitter":
break;
case "Youtube":
break;
case "Instagram":
break;
default:
break;
}
}
}
更新 ; 所有类都具有相同的特征。它们继承自一个类。但有些类有自己的特点。
我为此创建的方法如下。这不是一个很好的例子,但这就是我找到解决方案的方式。
public class IslemeBasla<T> where T : class, IEntity
{
private Facebook _fbHesap;
private Youtube _ytHesap;
private Instagram _insHesap;
private Twitter _twHesap;
public T _hEntity;
private string _browserLoc;
public void SetConfigs()
{
Type type = typeof(T);
switch (type.Name)
{
_fbHesap = _hEntity as Facebook;
_browserLoc = _fbHesap.Mail;
break;
case "Twitter": _twHesap = _hEntity as Twitter;
_browserLoc = _twHesap.Mail;
break;
case "Youtube": _ytHesap = _hEntity as Youtube;
_browserLoc = _ytHesap.Mail;
break;
case "Instagram": _insHesap = _hEntity as Instagram;
_browserLoc = _insHesap .Mail;
break;
default:
break;
}
}
}
解决方案
这不是使用泛型的方式。在提供的示例中,您也可以只使用常规引用,然后您可以使用模式匹配来处理不同的实现并根据需要使用对象。
您的示例没有显示您拥有什么样的对象,或者您打算如何使用它们。所以我会假装它们是向某种社交媒体平台发布消息的类。
public IEntity _hEntity;
public PostMessage()
{
switch (_hEntity)
{
case FaceBook fb:
fb.PostMessage("hello World"); // Do something with the object
break;
case Instagram ig:
ig.PostMessage("hello World");
break;
default:
throw new NotImplementedException();
}
}
但是,更好的选择是将逻辑放在类本身中并具有适当的接口方法。这将要求每个类都可以接受相同的参数来做它需要做的任何事情:
public interface ISocialMedia{
public void Post(string message);
}
...
public ISocialMedia socialMedia;
public PostMessage()
{
socialMedia.Post("Hello World");
}
另一个可能合适的选项(正如 dai 在评论中提到的那样)是受歧视的 union。如果您想要一个可以是多个不同不相关类型的单个值,这将很有用。例如,您可以有一把锤子或一根香蕉。
推荐阅读
- android - 无法使 Firebase 用于非 Gradle 构建:缺少 google_app_id。Firebase 分析已停用
- android - 运行 Espresso 测试方法作为步骤
- r - 将中间结果存储在管道中
- excel - EXCEL MATCH:从 1 个单元格内的多个条件返回 1 个匹配项
- php - 数组键的变量
- spring-boot - 如何使用单个请求将图像和 JSON 对象发布到后端 Spring Boot
- c++ - 从 GDCM 分配字符串时出现异常
- hadoop - YARN 无法使用嵌入式 HBase
- python - 连接文本文件中的单词
- reactjs - Webpack:./src/index.tsx 中的错误模块未找到:错误:无法解析“...”中的“./App”