I have a class called Pin
.
public class Pin
{
private string title;
public Pin() { }
public setTitle(string title) {
this.title = title;
}
public String getTitle()
{
return title;
}
}
From another class I add Pins objects in a List<Pin>
pins and from another I want to iterate the List pins and get the elements. So I have this code.
foreach (Pin obj in ClassListPin.pins)
{
string t = obj.getTitle;
}
With this code I cannot retrieve the title. Why?
(Note: ClassListPin
is just a static class which contains some elements and one of these, is the List<Pin>
pins)
To execute a method you need to add parentheses, even if the method does not take arguments.
So it should be:
string t = obj.getTitle();
Because getTitle
is not a string
, it returns a reference or delegate
to a method (if you like), if you don't explicitly call the method.
Call your method this way:
string t= obj.getTitle() ; //obj.getTitle() says return the title string object
However, this would work:
Func<string> method = obj.getTitle; // this compiles to a delegate and points to the method
string s = method();//call the delegate or using this syntax `method.Invoke();`
As mentioned you need to use obj.getTile()
But, in this case I think you are looking to use a Property.
public class Pin
{
private string title;
public Pin() { }
public setTitle(string title) {
this.title = title;
}
public String Title
{
get { return title; }
}
}
This will allow you to use
foreach (Pin obj in ClassListPin.pins)
{
string t = obj.Title;
}
As @Antonijn stated, you need to execute getTitle method, by adding parentheses:
string t = obj.getTitle();
But I want to add, that you are doing Java programming in C#. There is concept of properties (pair of get and set methods), which should be used in such cases:
public class Pin
{
private string _title;
// you don't need to define empty constructor
// public Pin() { }
public string Title
{
get { return _title; }
set { _title = value; }
}
}
And even more, in this case you can ask compiler not only for get and set methods generation, but also for back storage generation, via auto-impelemented property usage:
public class Pin
{
public string Title { get; set; }
}
And now you don't need to execute method, because properties used like fields:
foreach (Pin obj in ClassListPin.pins)
{
string t = obj.Title;
}
You can simplify your class code to this below and it will work as is but if you want to make your example work, add parenthesis at the end : string x = getTitle();
public class Pin
{
public string Title { get; set;}
}
getTitle
is a function, so you need to put ()
after it.
string t = obj.getTitle();
Source: Stackoverflow.com