在以下情况下应该使用什么-方法重载或使用泛型?

Sud*_*ade 1 c# generics overloading

我在下面有两种方法,我想知道应该使用哪种方法?

方法1:使用重载

public Color GetColor(int? Id)
        {
            return db.Colors.Find(Id);
        }
        public Color GetColor(string Name)
        {
            return db.Colors.Where(m => m.Name == Name).FirstOrDefault();
        }
Run Code Online (Sandbox Code Playgroud)

方法2:使用泛型

 public Color GetColor<T>(T value)
        {
            var type = value.GetType();

            if (type == typeof(Int32))
            {
                return db.Colors.Find(value); // Data fetched using Id
            }
            else if (type == typeof(string))
            {
                return db.Colors.Where(m => m.Name == value.ToString()).FirstOrDefault();  // Data fetched using name
            }
            return null;
        }
Run Code Online (Sandbox Code Playgroud)

以上两种方法都能达到预期的效果,我只想了解两者的优缺点,我应该选择哪一种?

Mur*_*nik 5

一般而言,泛型对于想编写一段代码但保留类型安全性的情况很有用。例如,无论列表包含什么内容,添加到列表中的代码都完全相同,但是您只能将字符串添加到字符串列表中。

在第二个代码段中,您共享的代码不是通用代码-它显式检查传递给它的参数的类型(在运行时!),并且仅处理字符串和整数。此代码段确实没有任何弊端,最好还是像第一个代码段那样坚持重载版本。