0

这可能是一个愚蠢的问题,但假设我想从OnSelectedIndexChanged我的 ASP .NET 应用程序中的事件中获取两个值。
哪个更好?

var personId = Convert.ToInt32(((GridView)sender).SelectedDataKey.Values["PersonId"]);
var name = ((GridView)sender).SelectedDataKey.Values["Name"].ToString();

或者

var gView = (GridView)sender;
var personId = Convert.ToInt32(gView.SelectedDataKey.Values["PersonId"]);
var name = gView.SelectedDataKey.Values["Name"].ToString();

就速度而言,两次投射 GridView 是否会产生如此大的差异?如果我拉更多的价值怎么办?有没有其他的

4

6 回答 6

5

后者(施放一次)会稍微快一些。我也更喜欢它的可读性。性能差异是如此之小,以至于在这种情况下真正考虑它很可能是毫无意义的微优化。

于 2012-05-14T21:29:35.600 回答
3

编译器将为您优化。为了可读性,我更喜欢第二个。

于 2012-05-14T21:29:00.280 回答
2

不铸造更好。理论上它在实践中更快,这并不重要。但是,您转换一次的事实会导致代码更清晰。

于 2012-05-14T21:28:49.703 回答
1

我会选择不投超过我需要的。在这种情况下,性能方面并不重要,但它更容易遵循。

于 2012-05-14T21:28:59.620 回答
1

由于一个铸造和可读性,我会选择几乎没有改进的第二个选项

var key = ((GridView)sender).SelectedDataKey;
var personId = Convert.ToInt32(key.Values["PersonId"]);
var name = key.Values["Name"].ToString();

此代码也更好地显示了意图 - 您在此处使用 DataKey,而不是使用整个 GridView,因此您不需要保留对 GridView 对象的引用。

于 2012-05-14T21:33:10.763 回答
0

施放两次比施放一次花费更多。
有一个选项,编译器将在两种情况下输出相同的 .dll,这意味着它已经为您优化它 - 更确定的是 - 使用第一个选择编译它并保存您获得的 .DLL,然后使用第二个选择编译它.
比较两个 .DLL 的大小 - 如果它相同 - 编译器已经为您优化了它,否则选择第二个选择,因为它更具可读性和更优化。

于 2012-05-14T21:33:03.023 回答