2017-01-15 3 views
-2

Ich habe zwei Klassen, die die gleichen Daten enthalten, aber ich kann nicht die Werte zwischen den beiden aufgrund Type confilcts übergeben. Wie konvertiert man Typen oder gibt Werte zwischen Typen weiter?

Dies sind die beiden Klassen,

public class Employee 
{ 
    public int Key { get; set; } 
    public string FirstName { get; set; } 
    public string SecondName { get; set; } 
    public string FullName => FirstName + " " + SecondName; 

    public Employee(int key, string first = null, string second = null) 
    { 
     Key = key; 
     FirstName = first; 
     SecondName = second; 
    } 
} 

public class EmployeeList 
{ 
    public int Key { get; set; } 
    public string FirstName { get; set; } 
    public string SecondName { get; set; } 
    public string FullName => FirstName + " " + SecondName; 

    public EmployeeList(int key, string first = null, string second = null) 
    { 
     Key = key; 
     FirstName = first; 
     SecondName = second; 
    } 
} 

ich dann Eigenschaften verwenden, um die Daten über LINQ-Abfragen zu speichern,

public ObservableCollection<Employee> Staff { get; set; } = 
    new ObservableCollection<Employee>(); 

public ObservableCollection<EmployeeList> StaffAll { get; set; } = 
    new ObservableCollection<EmployeeList>(); 

Dann habe ich die Werte in eine Eigenschaft für jeden passieren,

private Employee _selectedEmployee; 

public Employee SelectedEmployee 
{ 
    get { return _selectedEmployee; } 
    set 
    { 
     _selectedEmployee = value; 
     NotifyPropertyChanged(); 
    } 
} 

private EmployeeList _selectedEmployeeAll; 

public EmployeeList SelectedEmployeeAll 
{ 
    get { return _selectedEmployeeAll; } 
    set 
    { 
     _selectedEmployeeAll = value; 
     NotifyPropertyChanged(); 
    } 
} 

ZB

SelectedEmployee = Staff.First(); 
SelectedEmployeeAll = StaffAll.First(); 

Und was ich will zu tun ist, um die Werte von einer Klasse zum anderen zu gelangen, wie so etwas,

SelectedEmployee = SelectedEmployeeAll;  

Aber groben aufgrund type Konflikte kann ich die Daten nicht weitergeben von eins zu einander. Wie gehe ich vor, um die Daten von einem Typ zum anderen zu übertragen?

+5

Warum haben Sie zwei Klassen, die gleich sind? Scheint wie ein schlechter Entwurf für mich. –

+1

Wie folgt: 'SelectedEmployee = neuer Mitarbeiter (SelectedEmployeeAll.Key, SelectedEmployeeAll.FirstName, SelectedEmployeeAll.SecondName);' – Enigmativity

+0

@ZoharPeled, ich brauche zwei Datensätze. Ich habe versucht, dies mit nur einem Datensatz zu tun, aber es hat nicht funktioniert. – KyloRen

Antwort

3

Sie sollten Employee von EmployeeList erstellen:

SelectedEmployee = new Employee(SelectedEmployeeAll.Key, SelectedEmployeeAll.FirstName, SelectedEmployeeAll.SecondName); 

Aber Sie sollten nur eine Art zu verwenden versuchen, weil es nicht ein gutes Design ist zwei identische Typen zu haben.

Wenn Sie es in mehreren Apps verwenden möchten, denken Sie darüber nach, gemeinsam Class Library zu erstellen.

+0

Dies kompiliert nicht - 'CS7036 Es gibt kein Argument, das dem erforderlichen formalen Parameter 'key' von 'Employee.Employee (int, string, string)' entspricht. ' – Enigmativity

+0

@Enigmatismus, danke, es war mein Fehler, ich meine Antwort bearbeitet. –

-1

Ich kann nicht verstehen, wofür Sie eine Klasse mit anderen Namen verwenden. Sie können dies tun:

public class EmployeeList:Employee 
{ 
    public int Key { get; set; } 
    public string FirstName { get; set; } 
    public string SecondName { get; set; } 
    public string FullName => FirstName + " " + SecondName; 

    public EmployeeList(int key, string first = null, string second = null) 
    { 
     Key = key; 
     FirstName = first; 
     SecondName = second; 
    } 
} 

Aber richtige Weg, glaube ich, ist nur eine Klasse zu verwenden.

+1

Exakt die gleichen Eigenschaften in der Basis und der geerbten Klasse wiederholt? Ich denke, hier stimmt etwas nicht. Ich glaube, C# -Compiler wird Ihnen eine Warnung geben, 'neues' Schlüsselwort zu verwenden, wenn Verstecken beabsichtigt war. Sie sollten diese Eigenschaften in der abgeleiteten Klasse überhaupt nicht haben. – RBT

+0

Ich stimme zu - es ist keine richtige Entscheidung. aber C# -Compiler gab keine Warnung, - und ich poste es als alternativen Weg. –

Verwandte Themen