首页 > 解决方案 > 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;
            }
        }
    }

标签: c#classobjectmethods

解决方案


这不是使用泛型的方式。在提供的示例中,您也可以只使用常规引用,然后您可以使用模式匹配来处理不同的实现并根据需要使用对象。

您的示例没有显示您拥有什么样的对象,或者您打算如何使用它们。所以我会假装它们是向某种社交媒体平台发布消息的类。

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。如果您想要一个可以是多个不同不相关类型的单个值,这将很有用。例如,您可以有一把锤子一根香蕉。


推荐阅读