R
raylopez99
I suspect the answer to this question is that it's impossible, but how
do I make the below code work, at the point where it breaks (marked
below). See error CS0411
This is the complete code. Copy and paste it into VS2008 for a
Windows Forms application.
With some effort I can do the job with a user defined function, but my
question is whether I can do it using the built in library function
"Array.Find" and a predicate that takes multiple parameters rather
than one.
Thanks
RL
//////////////
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Forms01
{
public partial class Form1 : Form
{
Point[] points;
public Form1()
{
points = new Point[]{ new Point(100, 200),
new Point(150, 250), new Point(250, 375),
new Point(275, 395), new Point(295, 450) };
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Point first = new Point(11,11);
try
{
first = Array.Find(points, ProductGT10);
MessageBox.Show("Point is: " + first.X.ToString());
}
catch (ArgumentNullException)
{
MessageBox.Show("null");
}
// this first try block works, as expected, when commenting out the
second try block below,
// to give output ‘Point is: 150’
Rectangle R2 = new Rectangle(100, 100, 200, 200);
Point second = new Point(12, 12);
//second try block does not work (does not compile)
try
{
first = Array.Find(points, ProductGT10_2(second, R2));
/*
//error CS0411: The type arguments for method
'System.Array.Find<T>(T[], System.Predicate<T>)' cannot be inferred
from the usage. Try specifying the type arguments explicitly
*/
MessageBox.Show("Point2 is: " + second.X.ToString());
}
catch (ArgumentNullException)
{
MessageBox.Show("null2");
}
}
///////////////////
private static bool ProductGT10(Point p)
{
Rectangle R = new Rectangle(101, 101, 200, 200);
//hard code the rectangle R
//can we avoid having to hard code the rectangle here? Can we pass
it? See below
if (R.Contains(p))
{
return true;
}
else
{
return false;
}
}
//this doesn't compile
private static bool ProductGT10_2(Point P, Rectangle R) //
passing the R
{
if (R.Contains(P))
{
return true;
}
else
{
return false;
}
}
}//end of Form1
} //end of Forms01 namespace
do I make the below code work, at the point where it breaks (marked
below). See error CS0411
This is the complete code. Copy and paste it into VS2008 for a
Windows Forms application.
With some effort I can do the job with a user defined function, but my
question is whether I can do it using the built in library function
"Array.Find" and a predicate that takes multiple parameters rather
than one.
Thanks
RL
//////////////
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Forms01
{
public partial class Form1 : Form
{
Point[] points;
public Form1()
{
points = new Point[]{ new Point(100, 200),
new Point(150, 250), new Point(250, 375),
new Point(275, 395), new Point(295, 450) };
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Point first = new Point(11,11);
try
{
first = Array.Find(points, ProductGT10);
MessageBox.Show("Point is: " + first.X.ToString());
}
catch (ArgumentNullException)
{
MessageBox.Show("null");
}
// this first try block works, as expected, when commenting out the
second try block below,
// to give output ‘Point is: 150’
Rectangle R2 = new Rectangle(100, 100, 200, 200);
Point second = new Point(12, 12);
//second try block does not work (does not compile)
try
{
first = Array.Find(points, ProductGT10_2(second, R2));
/*
//error CS0411: The type arguments for method
'System.Array.Find<T>(T[], System.Predicate<T>)' cannot be inferred
from the usage. Try specifying the type arguments explicitly
*/
MessageBox.Show("Point2 is: " + second.X.ToString());
}
catch (ArgumentNullException)
{
MessageBox.Show("null2");
}
}
///////////////////
private static bool ProductGT10(Point p)
{
Rectangle R = new Rectangle(101, 101, 200, 200);
//hard code the rectangle R
//can we avoid having to hard code the rectangle here? Can we pass
it? See below
if (R.Contains(p))
{
return true;
}
else
{
return false;
}
}
//this doesn't compile
private static bool ProductGT10_2(Point P, Rectangle R) //
passing the R
{
if (R.Contains(P))
{
return true;
}
else
{
return false;
}
}
}//end of Form1
} //end of Forms01 namespace