不能隐式地将类型'地址'转换为'字符串'设置器
问题描述:
正如在标题中我试图让二传到地址,但我有这个转换错误。 我的Worker类的代码。不能隐式地将类型'地址'转换为'字符串'设置器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MAS_MP1
{
class Worker
{
string name, surname;
protected string adress;
int phoneNumber;
string birthDate;
Worker(String name, String surname, String adress, int phoneNumber, string birthDate)
{
this.name = name;
this.surname = surname;
this.adress = adress;
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
}
static List<Worker> list = new List<Worker>();
public static void add(Worker p)
{
list.Add(p);
}
public void setA(Adress a)
{
this.adress = a;
}
public static void showExtension()
{
Console.WriteLine("Class Extesion");
foreach (Worker p in list)
{
Console.WriteLine(p);
}
Console.ReadLine();
}
override
public string ToString()
{
return "Name " + name + " Surname " + surname;
}
public static void Main(string[] args)
{
Worker p = new Worker("Tom,","Smith","NewStreet 8 London",123456,"12-12-2012");
Adress a = new Adress("NewStreet" , 9 , "London");
add(p);
showExtension();
}
}
}
和错误是在这里:
public void setA(Adress a)
{
this.adress = a;
}
我尽量让COMPEX属性,所以我让第二类Adress
只有construstor和toString覆盖方法。地址得到了街道,homeNumber和cityName属性。
答
这怎么可能工作?你想存储的Adress
实例中的字符串...
protected string adress;
public void setA(Adress a)
{
this.adress = a;
}
有一对夫妇的修正。
你可以改变你的存储值的字段的类型:
protected Adress adress;
,改变构造函数接受Adress
还有:
Worker(String name, String surname, Adress adress, int phoneNumber, string birthDate)
另外,修改你的二传手所以你要存储一个字符串:
public void setA(Adress a)
{
this.adress = a.ToString();
}
答
Grant Winney是正确的。
此代码不起作用,因为类型Adress与System.String不同。尽管它们是从System.Object派生的,但在执行Set时不能隐式地转换它。
public void setA(Adress a)
{
this.adress = a;
}
答
你必须创建一个隐式转换
public class Address{
//other code
public static implicit operator Adress(string a)
{
return new Address(){Street = a};
}
}
作品。我看到有什么问题......谢谢! ;) – user2344333 2015-04-03 02:51:28
还有一个问题。现在,当我创建新的对象工人,我需要在地址下张贴? – user2344333 2015-04-03 03:00:09
我不确定你的意思。 “在地址下发帖”是什么意思?你能指出你指的是哪一行代码? – 2015-04-03 03:05:30