我有一个包含方法的库类。
- >创建一个类库项目并发布此方法。
public dynamic GetTrainRoute(string trainName)
{
//var list = new TrainDbManager().GetTrainRoute(dbConnection, trainName);
//return list;
var list = new []{new {TrainName = "Train A", RouteOrder = 1, From = "City A", To = "City B" } }.ToList();
list.Add(new { TrainName = "Train A", RouteOrder = 2, From = "City B", To = "City C" });
return list;
}
我将这个库的引用添加到我的控制台项目中,当我调用方法
时- >现在创建一个空项目,并将库项目的引用添加到新创建的项目中,现在创建该类的实例并调用该方法。
Manager man = new Manager();
var list = man.GetTrainRoute("Millat Up");
string s;
foreach (var v in list)
s = v.TrainName; // <- exception throws here
抛出异常'对象'不包含'TrainName'的定义。当我将鼠标悬停在列表上时,它包含列表,但是当我尝试检索该值时,它会抛出异常。我在这做什么。
任何帮助将不胜感激。 感谢
答案 0 :(得分:0)
要使此代码生效,您应该返回动态(IList<dynamic>
)的列表。
实际上,没有理由在这里使用匿名类型和dynamic
。您应该创建一个班级来保存列车时刻表信息。
此外,如果未返回任何结果,您的通话将失败,因为您无法foreach
超过null
。您应该创建一个空列表,然后在循环中添加它;如果没有结果,则返回的列表将为空。您可能还想查看yield return
。
答案 1 :(得分:0)
我觉得我应该提到this upfront:
除特定情况外,不建议使用
dynamic
关键字 interop senerios。
不仅如此,通过在您提供的代码段中使用动态关键字,几乎失去了使用强类型语言(如c#)的好处。
我建议您编写自己的火车类,而不是将其生成为匿名类型:
class Train { public string TrainName { get; set; } public int RouteOrder { get; set; } public string From { get; set; } public string To { get; set; } }
然后修改GetTrainRoute
函数以返回类型:
public List<Train> GetTrainRoute(string trainName) { //var list = new TrainDbManager().GetTrainRoute(dbConnection, trainName); //return list; List<Train> TrainCollection = new List<Train>(); TrainCollection.Add(new Train() { TrainName = "Train A", RouteOrder = 1, From = "City A", To = "City B" }); TrainCollection.Add(new Train() { TrainName = "Train A", RouteOrder = 2, From = "City B", To = "City C" }); return TrainCollection; }
你的错误现在应该消失了。 :)问题是混合dynamic
和anonymous
类型的结果。