Hello stackoverflow成员!
我对Java,Obj-C的C#语言转换非常陌生。 它看起来和Java非常相似,但我在非常简单的事情上遇到麻烦。 我创建了两个单独的类文件,Class-A和Class-Human。
它包含声明的静态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.
}
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'
谢谢。
答案 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;