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)
以上两种方法都能达到预期的效果,我只想了解两者的优缺点,我应该选择哪一种?
一般而言,泛型对于想编写一段代码但保留类型安全性的情况很有用。例如,无论列表包含什么内容,添加到列表中的代码都完全相同,但是您只能将字符串添加到字符串列表中。
在第二个代码段中,您共享的代码不是通用代码-它显式检查传递给它的参数的类型(在运行时!),并且仅处理字符串和整数。此代码段确实没有任何弊端,最好还是像第一个代码段那样坚持重载版本。