Возврат данных из одного метода в другой в классе - PullRequest
1 голос
/ 24 июня 2011

Спасибо за помощь с вопросом, который я только что задал об анонимных классах. Теперь я понимаю больше. Вот немного больше примера:

public class abc {
 public xx doAction() {
    return ( new { ID = 5, Name= "Dave" } );
 }
 public void doStart() {
    var a = doAction();
    var b = a.ID;
    var c = a.Name;
 }
}

Так что я прав, говоря, что самый идеальный способ сделать это - объявить класс XYX и использовать его следующим образом:

public class abc {
 public XYZ doAction() {
    return ( new XYZ { ID = 5, Name= "Dave" } );
 }
 public void doStart() {
    var a = doAction();
    var b = a.ID;
    var c = a.Name;
 }
}

Этот класс будет использоваться только для одной передачи данных между двумя методами.

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Да, хотя, если у вашего класса есть тривиальные свойства, вы можете использовать существующие классы .Net:

1) Вы можете использовать System.Tuple (.Net 4.0), но у вас больше не будет хороших имен свойств:

var result = Tuple.Create(5, "Dave");
int id = result.Item1;
string name = result.Item2;

2) Вы можете использовать KeyValuePair, если применимо:

var result = new KeyValuePair<int, string>(5, "Dave");
int id = result.Key;
string name= result.Value;
1 голос
/ 24 июня 2011

Я думаю, что вы имели в виду: вернуть новый XYZ (5, "Дейв"). В любом случае, ваше решение в порядке, но нет никаких причин создавать новый класс просто для обмена данными.Вы можете использовать хеш-таблицу / массив / словарь или любой другой класс, который вам больше подходит для обмена данными.Если вы хотите сделать что-то особенное с классом XYZ, или у него есть методы, которые вы хотите вызывать из него, вам придется создать новый класс XYZ и вернуть его.Однако, если вы просто хотите поделиться данными, используйте структуру данных, которая уже доступна для вашего использования.

1 голос
/ 24 июня 2011

Это сработало бы, да. Если это самый идеальный или нет, трудно сказать. Поскольку вы используете переменные «ID» и «Name», это как бы указывает на то, что вы работаете с объектами домена из базы данных, и если это так, вам, вероятно, понадобится класс для гораздо большего, чем только этот метод.

А как насчет класса ABC? Что это за класс? Потому что вы также можете сделать это:

public class abc{
 private int _id;
 private string _name;

 public void DoAction(){
  _id = 5;
  _name = "Dave";
 }

 public void DoStart(){
  var b = _id;
  var c = _name;
 }
}

Но не забудьте использовать правильные названия для своих классов, чтобы вы имели представление о том, для чего они используются.

...