C#不能转换方法非委托类型(C# cannot convert method to non dele

2019-07-19 21:51发布

我有一类称为Pin

public class Pin
{
    private string title;

    public Pin() { }

    public setTitle(string title) {
        this.title = title;
    }
    public String getTitle()
    {
        return title;
    }
}

从另一个类我在加销对象List<Pin>针从另一个我想遍历列表销和获得的元素。 所以我有这样的代码。

foreach (Pin obj in ClassListPin.pins)
{
     string t = obj.getTitle;
}

有了这个代码,我不能检索的称号。 为什么?

(注: ClassListPin仅仅是一个静态类,其中包含一些元件和这些中的一个,是List<Pin>引脚)

Answer 1:

你需要一个方法调用后添加括号,否则编译器会以为你在谈论的方法本身(委托类型),而你实际上是在谈论该方法的返回值。

string t = obj.getTitle();

额外的非基本信息

另外,看看属性。 这样,你可以使用标题,如果它是一个变量,而在内部,它像一个功能。 这样,你就不必写功能getTitle()setTitle(string value) ,但你可以做这样的:

public string Title // Note: public fields, methods and properties use PascalCasing
{
    get // This replaces your getTitle method
    {
        return _title; // Where _title is a field somewhere
    }
    set // And this replaces your setTitle method
    {
        _title = value; // value behaves like a method parameter
    }
}

或者你可以使用自动实现的属性,这会在默认情况下使用:

public string Title { get; set; }

而你就不必建立自己的后备字段( _title ),编译器会创建它自己。

此外,您还可以更改属性访问器(getter和setter)的访问级别:

public string Title { get; private set; }

您可以使用性能,如果他们领域,即:

this.Title = "Example";
string local = this.Title;


Answer 2:

getTitle是一个函数,所以你需要把()之后。

string t = obj.getTitle();


Answer 3:

作为@Antonijn说,你需要执行的getTitle方法,通过添加括号:

 string t = obj.getTitle();

但我想补充一点,你正在做的Java编程在C#。 有的概念的属性 (对获取和设置方法),这应该在这样的情况下使用:

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; }
    }  
}

而且甚至更多,在这种情况下,你可以要求编译器不仅为get和set方法的产生,同时也为后面储存一代,通过自动impelemented财产的使用:

public class Pin
{
    public string Title { get; set; }
}

现在你不需要执行方法,因为性质一样使用领域:

foreach (Pin obj in ClassListPin.pins)
{
     string t = obj.Title;
}


Answer 4:

如前所述,你需要使用obj.getTile()

但是,在这种情况下,我认为你正在寻找使用属性 。

public class Pin
{
    private string title;

    public Pin() { }

    public setTitle(string title) {
        this.title = title;
    }

    public String Title
    {
        get { return title; }
    }
}

这将允许您使用

foreach (Pin obj in ClassListPin.pins)
{
     string t = obj.Title;
}


Answer 5:

您可以简化类代码这个下面,也将努力为是,但如果你想使你的工作例如,在末尾加上括号:串x =的getTitle();

public class Pin
{
   public string Title { get; set;}
}


Answer 6:

由于getTitle不是一个string ,它返回一个参考或delegate的方式(如果你喜欢),如果不明确地调用该方法。

打电话给你的方法是这样的:

string t= obj.getTitle() ; //obj.getTitle()  says return the title string object

然而,这会工作:

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();`


Answer 7:

要执行你需要添加括号,即使该方法不带参数的方法。

因此,它应该是:

string t = obj.getTitle();


文章来源: C# cannot convert method to non delegate type