我需要将两个值传递给Function
这两个值都在Object
类中我有两个选择
问题:类对象除了我想要的内容之外还有很多成员
问题:哪个是最佳选择?
实施例
此功能用于数据库查询
FunctionName(string opt1,string opt2)
{
using (SqlConnection connection = this.Connection)
{
connection.Execute("select count(*) from table where opt1 = opt1 and opt2 = opt2", new { opt1 = opt1, opt2 = opt2 });
}
}
或
FunctionName(className obj)
{
using (SqlConnection connection = this.Connection)
{
connection.Execute("select count(*) from table where opt1 = opt1 and opt2 = opt2", new { opt1 = obj.opt1, opt2 = obj.opt2 });
}
}
函数调用如下所示
class className {
public string opt1;
public string opt2;
public string opt3;
public string opt4;// and more
}
className obj1
FunctionName(obj1.opt1,obj1.opt2) Or
FunctionName(obj1)
答案 0 :(得分:2)
3 - 传递专为此工作而设计的新类/结构:)
但是,如果您只关心效率而不是安全性,那么传递类引用并不取决于该类有多少字段。传递一个没有字段的类所花费的时间与传递具有100 MiB数据的类完全相同。除非它是struct
。
不要将类序列化为字符串,而是将其再次传递给方法。这只是个坏主意。你失去了类型安全性,它会很昂贵,并且编译器会丢失很多选项来警告你你做错了什么。
当然,如果您只是传递参数,这无关紧要。这可以带来一些好处,主要是确保(只要你不使用任何可变引用类型)你也将保持线程安全,并且它限制了可能的副作用(例如,修改传递的类 - 它不是副本,它是同一个实例;再次,除非你传递struct
)。
答案 1 :(得分:1)
我会说这是基于意见的,但我仍会尝试回答:我的经验法则是,如果参数很少(不超过三个 - 最好不超过两个),那么参数可以直接传递。仅仅因为在大多数情况下这是最简单的解决方案。
如果你有三个以上的参数,你应该考虑添加一个类只是为了清楚明了。但是,正如您所指出的那样,您可能不希望传递具有大量额外值的类。如果是这样,您有几个选择,例如: