2013-05-23 2 views
1

Почему следующий фрагмент кода не работает?Параметр в конструкторе: Структуры против классов

public struct AStruct 
{ 
    public bool Fi { get; set; } 

    public string Fei{ get; set; } 

    public bool Fo{ get; set; } 

    public string Fam{ get; set; } 

    public AStruct(bool fi, string fei, bool fo, string fam) 
     : this() 
    { 
     this.Fi = fi; 
     this.Fei = fei; 
     this.Fo = fo; 
     this.Fam = fam; 
    } 
} 

и, наконец, называть его в конструкторе управления

public GS(AStruct astruct) 
    {} 

Visual Studio 2012 и компилятор жалуется, что AStruct не найден.

Если изменить его

public class AStruct 
{ 
.... 
} 
public AStruct(bool fi, string fei, bool fo, string fam) 
{ 
.... 
} 

он не жалуется больше ...

Любые подсказки?

+0

Вы уверены, что AStruct находится в правильном пространстве имен? – Peter

+1

Виновником является ': this()'. Структуры отличаются друг от друга. – Candide

+0

@peer Я просто немного его очистил для SO, чтобы показать не слишком много кода ... – Offler

ответ

4

Поскольку AStruct не имеет параметров, меньших конструктора, компилятор жалуется. Так зачем беспокоиться о добавлении : this() к параметризованному конструктору?

И еще раз, structs не может содержать параметр less constructor [MSDN].

Я немного поучаствовал в этом, теперь я предполагаю, что у вас проблема с пространством имен. Если пространство имен правильно, я предлагаю вам перезапустить Visual Studio и выполнить перестройку. У меня иногда возникает необъяснимая ошибка, и после перезапуска Visual Studio и восстановления проблема решена.

Else, можно ли получить код ошибки? CS ....

+0

Без ': this()' компилятор будет жаловаться на структуру. Это необходимо, если у вас есть AutoProperties. Он также не жалуется на структуру, он только жалуется на конструктор Control, что он не может найти STruct. В других классах структура уже используется ... – Offler

+0

попробуйте в конструкторе использовать полное имя структуры. 'public GS (My.Name.Space.Foo.Bar.Astruct astruct) {}' – SynerCoder

+0

О, я изменил структуру на класс в том же пространстве файлов/имен, поэтому это не должно быть проблемой пространства имен. Funilly перезапуск студии (чистый, сборка) сделал это. – Offler