我可以在C#中创建对类的引用吗?

时间:2011-06-23 10:36:09

标签: c#

在我的代码中,我设置了两个不同的数据源:

_dslocal = new XXX("local"); <- example only
_dsremote = new XXX("remote"); <- example only

稍后在代码中,我使用类似于此的长选择检索数据:

var _rowData = (from question in _dslocal.GetAll() <- example only
                ... many lines of code

我想做的是允许用户在本地和远程之间切换。一世 不希望有类似的东西:

if ( switch == "local" ) {
  var _rowData = (from question in _dslocal.GetAll() <- example only
                ... many lines of code

} else {
  var _rowData = (from question in _dsremote.GetAll() <- example only
                ... many lines of code
}

也许这不是一个好问题,但我可以这样做:

if ( switch == "local" ) {
  var _source = _dslocal;
} else {
  var _source = _dsremote;
}
var _rowData = (from question in _source.GetAll() <- example only
                ... many lines of code

2 个答案:

答案 0 :(得分:4)

是的,你绝对可以这样做。还有一些选项可能会使代码更清晰,更易于阅读。在你的情况下,我会创建一个这样的方法:

DataSource GetDataSource(string switch)
{
    return switch == "local" ? _dslocal : _dsremote;
}

然后你的LINQ代码可以更清洁:

var _source = GetDataSource(switch);
var _rowData = (from question in _source.GetAll());

我曾经听过Jon Skeet引用指向气球上的字符串之类的对象的引用。任何给定的气球(对象)都可以附加许多字符串(引用)。您可以根据需要随意创建对该对象的引用,但请记住引用本身不是对象,如果您使用引用更改对象,则所有其他引用也将看到更改,因为它们都指向相同的事情。

答案 1 :(得分:1)

更好的是,你可以这样做:

XXX _source;

if ( switch == "local" ) {
  _source = new XXX("local");
} else {
  _source = new XXX("remote");
}

甚至,或许:

var source = new XXX(switch);