2016-06-26 84 views
11

Beh, io utilizzare Visual Studio 2015 CE, aggiornare 2. Una produttività mod faccio di solito è che posso creare classi del modello vuote come:Impedire visual studio di limitare il metodo setter per interno

public class PersonModel 
{ 
} 

e poi utilizzarli in un'espressione di selezione del tipo:

db.People.Where(p => someCondition) 
.Select(p => new PersonModel 
{ 
    Id = p.Id, 
    Name = p.Name, 
    //set other properties 
}).ToList(); 

poi vado alle proprietà ancora non esistenti Id e Name, ... e premere Control+. chiedere visual Studio per generate property Id per me. Tutti i grandi, ma si creerà:

public int Id { get; internal set; } 

e se uso lo stesso metodo nel legare un modello asp.net WebAPI, il legame non riuscirà silenzio e darmi Id = 0.

Quindi la mia domanda è: c'è qualche possibilità di chiedere VS per creare setter pubblico, cioè .:

public int Id { get; set; } 

risposta

3

Esso ha fissato modificatore di accesso al internal perché base su codice attuale è quella appropriata. Nel tuo caso, stai facendo riferimento alla proprietà creata proprio all'interno dello stesso assieme, quindi il modificatore di accesso internal è il più adatto. Non penso che tu possa modificare questo comportamento.

Se si utilizza Resharper, verrà creato automaticamente il setter pubblico. Un'altra soluzione è spostare le classi per le quali desideri questo comportamento per un altro assembly.

+0

Grazie per il chiarimento sul motivo del comportamento. Spero davvero che ci sia una soluzione alternativa per preferire 'public' a' internal' – Alireza

+2

Non mi è chiaro cosa significhi "perché basato sul codice corrente è quello appropriato", comunque se la classe è 'Serializable' l'accessibilità interna non consente una corretta inizializzazione: il 'XmlSerializer' lancia un'eccezione poiché non può accedere al setter. Inoltre, non suggerisco di creare un altro assembly per evitare di cancellare 'internal'. Sarebbe bello avere un modo per cambiare questo comportamento, –

+0

@AngeloMascaro. Viene gestito dal binding del modello asp.net mvc (o web-api). Ignora silenziosamente il setter interno. – Alireza