C#返回值,但不断收到错误。为什么?

时间:2010-10-16 22:02:42

标签: c#

Hello stackoverflow成员!

我对Java,Obj-C的C#语言转换非常陌生。 它看起来和Java非常相似,但我在非常简单的事情上遇到麻烦。 我创建了两个单独的类文件,Class-A和Class-Human。

A类规范

它包含声明的静态main方法。我尝试创建Class-Human的新实例。

public static void main(String args[])
{
      Human human = new Human("Yoon Lee", 99);
      int expected = human.getNetID; //<-gets the error at this moment.
}

Class-Human

规范
namespace Class-A
{
    public class Human
    {
        public String name;
        public int netId;

        public Human(String name, int netId)
        {
            this.name = name;
            this.netId = netId;
        }
     public int getNetID()
     {
         return netId;
     }
}     

为什么不能复制到本地变量? 编译器提示我错误

'Cannot convert method group of 'getNetID' delegate blah blah'

谢谢。

6 个答案:

答案 0 :(得分:9)

将方法调用更改为:

int expected = human.getNetID();

在C#中,方法调用需要包含以逗号分隔的参数列表的parantheses ()。在这种情况下,getNetID方法是无参数的;但是空的parantheses仍然需要表明你的意图是调用方法(而不是,例如,将方法组转换为委托类型)。

此外,正如其他人所指出的那样,方法的返回类型与您分配其值的变量之间存在不匹配,您将不得不以某种方式解析 (将字段类型和方法返回类型更改为int /将字符串解析为整数等。)。

另一方面,C#本身支持properties获取getter-setter语义,因此写这个的惯用方法如下:

//hyphens are not valid in identifiers
namespace ClassA
{
    public class Human
    {
        // these properties are publicly gettable but can only be set privately
        public string Name { get; private set; } 
        public int NetId { get; private set; }

        public Human(string name, int netId)
        {
            this.Name = name;
            this.NetId = netId;
        }

        // unlike Java, the entry-point Main method begins with a capital 'M'
        public static void Main(string[] args)
        {
            Human human = new Human("Yoon Lee", 99);
            int expected = human.NetId; // parantheses not required for property-getter
        }

    }
}

答案 1 :(得分:1)

您正在尝试使用方法,就好像它是属性一样。您需要括号并将字符串转换为int,或只是让getNetID返回int

我认为你的意思是:

public int getNetID()
{
  return netId;
}   

或者更好的是,使用自动属性:

public int NetId {get; private set;}  //Notice Making N in Net capital

然后:

int expected = human.getNetID();  

这样可以解决问题( - :

答案 2 :(得分:0)

应为human.getNetID()

编辑:是的,正如奥伦所说 - 你应该改变你的netId getter以返回int。我认为这就是你想要做的。

答案 3 :(得分:0)

Human human = new Human("Yoon Lee", 99);
int expected = human.getNetID(); //<-gets the error at this moment.

您需要在方法调用后添加括号。

你现在就拥有这个功能本身。

答案 4 :(得分:0)

我看到netId是整数。

getNetID() return type is string. 

返回类型不匹配。

答案 5 :(得分:0)

netID声明为Int:

public int netId;

但你的函数getNetID返回一个字符串:

public String getNetID()

因此,当尝试将int作为字符串返回时,getNetID的主体没有任何意义:

return netId;