2011-06-24 27 views
1

感谢您对我刚刚提交的关于匿名类的问题的帮助。现在我了解得更多了。下面是多一点的例子:将数据从一个方法返回到另一个类中的另一个方法

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; 
} 
} 

的类只会用于这两种方法之间的这种数据传输。

回答

1

我想你的意思是:返回新XYZ(5, “戴夫”) 总之,你的解决方案没问题,但没有理由创建一个新的类来简单地共享数据。您可以使用散列表/数组/字典或任何适合您的类来共享数据。如果你想在XYZ类中做一些特殊的事情,或者你想调用它的方法,那么你将不得不创建一个新的类XYZ并返回它。但是,如果您只想分享数据,请使用已经可用的数据结构。

+0

如果我返回数据作为公共JsonResult是如何矫枉过正?我想这会把数据整齐地包装起来? –

+0

如果您需要将您的数据格式化为JSon格式,以便稍后进行处理,那么肯定为什么不这样做。虽然,如果你不需要JSon结果的复杂性,那么我不明白为什么你不能使用更简单的数据结构来存储结果。 – peacey

1

这会工作是的。如果这是最理想的或不是很难说。既然你正在使用变量“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; 
} 
} 

但要记住使用正确的命名你的课程,让你拥有它们用于什么的想法。

1

是的,但如果你的类有您可以考虑使用现有的.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; 
相关问题