我正在將控制器中的物件串列傳遞給幫助器類中的函式,該函式將回傳字典。但是,我得到的回傳值總是什么都沒有。我的物件串列作業正常并且值存在,因此錯誤在幫助程式類中。
這是我的控制器:
[HttpPost]
public ActionResult Form(List<Student> s)
{
var c = new HelperClass();
var result = c.helpermethod(s);
ViewBag.Result = s.Count; // RETURNS CORRECT LENGTH
ViewBag.Value = result.Count; // ALWAYS RETURN ZERO
return View("Index");
}
我的助手類中的方法:
public Dictionary<Person,int> helpermethod(List<Student> s)
{
var result = new Dictionary<string, int>();
List<string> k = new List<string>();
List<int> v = new List<int>();
for (int i = 0; i < s.Count; i )
{
var d = s[i];
if (k.Contains(d.Name)){
int index = k.FindIndex(a => a == d.Name);
v[index] = d.Age;
}
else {
k.Append(d.Name);
v.Append(d.Age);
}
}
// Create Dictionary
for (int i = 0; i < k.Count; i )
{
var p= new Person(k[i]) ;
result.Add(Person, v[i]);
}
return result;
}
字典是人物件:
public class Person
{
public string p { get; set; }
// Intializing class
public Person(string x)
{
p = x;
}
}
Dictionary 的鍵是一個學生物件:
這是我的模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVCModel.Models
{
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
}
uj5u.com熱心網友回復:
主要問題在這個片段中:
else {
k.Append(d.Name);
v.Append(d.Age);
}
.Append()是一種不修改原始集合的 LINQ 擴展方法,它只是回傳一個新IEnumerable的,最后添加了元素。這意味著k并v保持為空,并且最后一個 for 回圈helpermethod永遠不會運行。由于kand vare List,請.Add()改用。或者更好的是,使用ToDictionary。
除此之外,我在您的代碼中看到了更多問題:
var result = new Dictionary<string, int>();
應該是Dictionary<Person, int>,它甚至不應該按原樣編譯,因為它與 . 的回傳型別不匹配helpermethod。
result.Add(Person, v[i]);
應該是result.Add(p, v[i]);,Person是一種型別。
uj5u.com熱心網友回復:
首先,Person代碼中宣告的變數在哪里?
...
// Create Dictionary
for (int i = 0; i < k.Count; i )
{
var p= new Person(k[i]) ;
result.Add(Person, v[i]); // <-- What is Person here?? Did you mean p?
}
其次,為什么不直接使用:
var res = s.ToDictionary(x => x.Name, x => x.Age);
無需重新發明輪子。
此外,為什么不擴展Person類以保存年齡并回傳 aList<Person>而不是 a Dictionary<string, int>?
像這樣:
public class Person
{
public string Name { get; set; }
public string Age { get; set; }
// Intializing class
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
然后你可以像這樣使用它:
...
var persons = s.Select(student => new Person(student.Name, student.Age);
ViewBag.Value = persons.Count();
它更容易理解并且不易出錯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/495003.html
標籤:C# 网 asp.net-mvc asp.net-mvc-4 asp.net-mvc-5
