不能隐式地将类型'地址'转换为'字符串'设置器

问题描述:

正如在标题中我试图让二传​​到地址,但我有这个转换错误。 我的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(); 
} 
+0

作品。我看到有什么问题......谢谢! ;) – user2344333 2015-04-03 02:51:28

+0

还有一个问题。现在,当我创建新的对象工人,我需要在地址下张贴? – user2344333 2015-04-03 03:00:09

+0

我不确定你的意思。 “在地址下发帖”是什么意思?你能指出你指的是哪一行代码? – 2015-04-03 03:05:30

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

入住这https://msdn.microsoft.com/en-us/library/z5z9kes2.aspx