计算最小值和最大值C#
我试图从datagridview中计算最大值。 这里是我的全部代码:计算最小值和最大值C#
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class HRData
{
public int? HeartRate
{
get;
set;
}
public int? Speed
{
get;
set;
}
public int? Power
{
get;
set;
}
public int? Altitude
{
get;
set;
}
public override string ToString()
{
return String.Format("Heart rate={0}, Speed={1}, Power={2}, Altitude={3}", HeartRate, Speed, Power, Altitude);
}
}
public static class HRDataReader
{
static private int? ConvertValue(string[] values, int index)
{
if (index >= values.Length)
return null;
int value;
if (int.TryParse(values[index], out value))
return value;
return null;
}
static public IList<HRData> Read(string fileName)
{
if (string.IsNullOrEmpty(fileName))
throw new ArgumentNullException("fileName");
using (StreamReader sr = new StreamReader(fileName))
{
string line;
// First: Skip to the correct section.
while ((line = sr.ReadLine()) != null)
if (line == "[HRData]")
break;
// Now: Read the HRData
List<HRData> data = new List<HRData>();
while ((line = sr.ReadLine()) != null)
{
if (line.StartsWith("[") && line.EndsWith("]"))
break;
line = line.Trim().Replace("\t", " "); // Remove all tabs.
while (line.Contains(" ")) // Remove all duplicate spaces.
line = line.Replace(" ", " ");
string[] values = line.Split(' '); // Split the line up.
data.Add(new HRData
{
HeartRate = ConvertValue(values, 0),
Speed = ConvertValue(values, 1),
Power = ConvertValue(values, 2),
Altitude = ConvertValue(values, 3)
});
}
return data;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click_1(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
IList<HRData> data = HRDataReader.Read(openFileDialog1.FileName);
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = "HeartRate", HeaderText = "Heart rate", DataPropertyName = "HeartRate" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = "Speed", HeaderText = "Speed", DataPropertyName = "Speed" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = "Power", HeaderText = "Power", DataPropertyName = "Power" });
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { Name = "Altitude", HeaderText = "Altitude", DataPropertyName = "Altitude" });
dataGridView1.DataSource = data;
int maxSpeed = Speed.Max();
maxSpeed = maxSpeed/10;
string MaxSpeed = Convert.ToString(maxSpeed);
textBox1.Text = MaxSpeed;
}
}
}
}
我收到一条错误 '廉政MAXSPEED = Speed.Max();'
该错误消息说,
“名称‘速度’并没有在当前的背景下存在”我不知道我应该把什么样的价值在那里代表我的一列。希望有人能够帮助我解决这个问题。谢谢。
速度不是一个类或一个对象,所以它不知道它是什么。你必须使用一个函数和一个集合:
int maxSpeed = data.Max(x => x.Speed.Value);
See the documentation on list max for more information and sample code.
什么是FindMax? – user2375636 2013-05-12 20:05:14
更新了我的答案,以便与列表一起工作。 – Jason 2013-05-12 20:14:10
出现错误:“不能隐式转换类型'int?'到'int'。一个明确的转换存在(你是否缺少一个演员?) “ – user2375636 2013-05-12 20:18:11
你或许应该使用Math.Max Method (Double, Double)
和Math.Min Method (Double, Double)
在标准的.NET C#库包括
像这样的事情可能?
int minAccountLevel = int.MaxValue;
int maxAccountLevel = int.MinValue;
foreach (DataGridViewRow dr in table.Rows)
{
int accountLevel = dr.Cells["Speed"];
minAccountLevel = Math.Min(minAccountLevel, accountLevel);
maxAccountLevel = Math.Max(maxAccountLevel, accountLevel);
}
它崩溃在线“foreach(dataRow dr在dataGridView1.Rows)”与消息无法投射类型'System.Windows.Forms.DataGridViewRow'类型'System.Data.DataRow'的对象。 – user2375636 2013-05-12 20:13:40
对不起,我的错。编辑! – 2013-05-12 20:24:14
这是一个很大的代码。你能把它修剪一下吗?它也可以帮助你自己确定问题。 – 2013-05-12 20:21:41